http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60852
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> --- Both clang and G++ reject: static const int value = sizeof ~make<E>(); Whereas clang accepts (and G++ rejects) the same expression using a dependent type: template <typename Rhs> struct H { static const int value = sizeof ~make<Rhs>(); }; Clang constructs a temporary D and applies operator~ to that temporary