http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51365
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-11-30 21:19:28 UTC --- Thanks for the pointer, the hardest part was naming the new intrinsic ;) We can't have the front-end define __is_final() as an intrinsic and also define std::__is_final as a class template, so the patches above define __is_final_class() and std::__is_final<> It might be better for the front end to define __is_final() then use that directly in the library and not provide a type trait unless std::is_final gets added to the library by a DR. i.e. in <tuple> template<typename _Tp> using __empty_base = typename conditional<__is_final(_Tp), false_type, is_empty<_Tp>>::type;