blob: 43ce545c96cc25779aea70b4974752ff261d2df1 [file] [log] [blame]
// { dg-do compile { target c++11 } }
// PR c++/86246 ICE in tsubst
namespace std {
template<typename T> struct is_class {
static constexpr bool value = true;
};
template<> struct is_class<double> {
static constexpr bool value = false;
};
}
class MyClass {
public:
operator double() const {
return 1;
}
template<typename T>
operator T() const {
static_assert(std::is_class<T>::value, "problem");
return T();
}
};
template<typename T>
void SetValue(const MyClass& obj, T* value) {
// erroneously dispatched to operator T when T is double
*value = obj.operator T();
}
int main() {
MyClass obj;
// works fine
obj.operator double ();
double x;
// error, when operator T is called in SetValue
SetValue(obj, &x);
}