On 22 February 2012 15:55, Hite, Christopher wrote: > > Hi, does has_trivial_destructor<> and co depend on compiler magic? Yes. > Is it possible to detect empty deconstructors/constructors. The reason I ask is because I'd like to make better placeholders for a boost::optional implementation using new unions from N2544. > > template<typename T> > union placeholder{ > T v; > placeholder() {} // breaks has_trivial_constructor > ~placeholder (){} // breaks has_trivial_destructor > }; > > Is improving these possible or is there some conceptual problem with a circular reference? I don't understand the question, sorry. What do you mean "breaks has_trivial_constructor" ? Do you just mean has_trivial_default_constructor::value is false? If you declare the constructor and destructor as defaulted then they will be trivial for placeholder<X> if they are trivial for X: placeholder() = default; ~placeholder () = default;