// Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. use std::sync::atomic::{Ordering, AtomicUsize}; use std::mem; struct S { _u: U, size_of_u: usize, _v: V, size_of_v: usize } impl S { fn new(u: U, v: V) -> Self { S { _u: u, size_of_u: mem::size_of::(), _v: v, size_of_v: mem::size_of::() } } } static COUNT: AtomicUsize = AtomicUsize::new(0); impl Drop for S { fn drop(&mut self) { assert_eq!(mem::size_of::(), self.size_of_u); assert_eq!(mem::size_of::(), self.size_of_v); COUNT.store(COUNT.load(Ordering::SeqCst)+1, Ordering::SeqCst); } } fn main() { assert_eq!(COUNT.load(Ordering::SeqCst), 0); { S::new(0u8, 1u16); } assert_eq!(COUNT.load(Ordering::SeqCst), 1); }