http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50545
Bug #: 50545 Summary: [C++0x] SFINAE does not handle an explicit type conversion (functional notation) with a braced-init-list well if target type is not dependent Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: gintensub...@gmail.com // tested on gcc-4.7-20110924 (experimental) template< class T > T&& declval(); // #1 template< class T > auto f( int ) -> decltype( int{ declval<T>() } ); // #2 template< class > void f( ... ); #define STATIC_ASSERT( ... ) static_assert( __VA_ARGS__, #__VA_ARGS__ ) template< class T, class U > struct is_same { static constexpr bool value = false; }; template< class T > struct is_same<T, T> { static constexpr bool value = true; }; STATIC_ASSERT( is_same< decltype( f<int>(0) ), int >::value ); // OK; f<int>(0) calls #1. STATIC_ASSERT( is_same< decltype( f<int*>(0) ), void >::value ); // static assertion fails; f<int*>(0) should call #2, because int{ (int*)0 } is ill-formed, but calls #1.