1 // PR c++/58932 2 // { dg-do compile { target c++11 } } 3 4 using nullptr_t = decltype(nullptr); 5 6 template<typename T, typename Sfinae = nullptr_t> 7 struct B { 8 static float& int_if_addable(); 9 }; 10 11 template<typename T> 12 struct B<T, decltype( (T() + T()), nullptr )> { 13 static int& int_if_addable(); 14 }; 15 16 struct X { }; 17 18 struct Y { }; 19 Y operator+(Y, Y); 20 21 struct Z { }; 22 Z operator+(Z, Z) = delete; 23 24 int main() 25 { 26 float& a = B<X>::int_if_addable(); 27 int& b = B<Y>::int_if_addable(); 28 float& c = B<Z>::int_if_addable(); 29 } 30