http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57419
Bug ID: 57419 Summary: Access control doesn't stop referring to a deleted function Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: potswa at mac dot com Using reference-to-member syntax on a private, deleted function in a SFINAE context fails as a hard error as a use of a deleted function. But it can't be accessed in the first place due to the access control. Calling the function instead produces the desired result. Clang 3.2 accepts this TU but GCC 4.9 rejects: template< typename q > decltype( &q::f ) t( q ) {} char t( ... ) { return {}; } class c { void f() = delete; }; class d { static void f() = delete; }; static_assert( sizeof( t( c() ) ), "c" ); static_assert( sizeof( t( d() ) ), "d" );