| // PR c++/37208: SFINAE and deleted functions. | |
| // { dg-do compile { target c++11 } } | |
| template<int> struct A { }; | |
| template<typename T> | |
| int& int_if_addable(A<sizeof((*(T*)0) + (*(T*)0))>*); | |
| template<typename T> | |
| float& int_if_addable(...); | |
| struct X { }; | |
| struct Y { }; | |
| Y operator+(Y, Y); | |
| struct Z { }; | |
| Z operator+(Z, Z) = delete; | |
| void f() | |
| { | |
| float& x = int_if_addable<X>(0); | |
| int& y = int_if_addable<Y>(0); | |
| float& z = int_if_addable<Z>(0); | |
| } |