#include <type_traits>
#include <iostream>
template<class T>
struct trait{ using type = typename T::type; };
template<class T, class U = typename trait<T>::type>
void f(int);
void f(...);
template<class T, class U = typename T::type>
int g(int);
void g(...);
template<class>
struct dependent_false : std::true_type{};
template<class T>
struct X{
static_assert(dependent_false<T>(), "...");
using type = void;
};
int main(){
// f<int>(0);
decltype(g<X<int>>(0)) y=5;
std::cout<<"y: "<<y<<std::endl;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpzdHJ1Y3QgdHJhaXR7IHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBUOjp0eXBlOyB9OwoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVSA9IHR5cGVuYW1lIHRyYWl0PFQ+Ojp0eXBlPgp2b2lkIGYoaW50KTsKdm9pZCBmKC4uLik7Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVID0gdHlwZW5hbWUgVDo6dHlwZT4KaW50IGcoaW50KTsKdm9pZCBnKC4uLik7Cgp0ZW1wbGF0ZTxjbGFzcz4Kc3RydWN0IGRlcGVuZGVudF9mYWxzZSA6IHN0ZDo6dHJ1ZV90eXBle307Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpzdHJ1Y3QgWHsKICAgIHN0YXRpY19hc3NlcnQoZGVwZW5kZW50X2ZhbHNlPFQ+KCksICIuLi4iKTsKICAgIHVzaW5nIHR5cGUgPSB2b2lkOwp9OwoKaW50IG1haW4oKXsKICAgLy8gIGY8aW50PigwKTsKICAgIGRlY2x0eXBlKGc8WDxpbnQ+PigwKSkgeT01OwogICAgc3RkOjpjb3V0PDwieTogIjw8eTw8c3RkOjplbmRsOwp9