#include <iostream>
template< typename t >
typename std::enable_if< sizeof (t), std::true_type >::type
is_complete_fn( t * );
std::false_type is_complete_fn( ... );
template< typename t, bool value = decltype( is_complete_fn( (t *) nullptr ) )::value >
struct is_complete : std::integral_constant< bool, value > {};
struct q;
void a() {
std::cout << is_complete< q >::value << '\n';
}
struct q {};
void b() {
std::cout << is_complete< q >::value << '\n';
}
int main() {
std::cout.setf( std::ios::boolalpha );
a();
b();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8IHR5cGVuYW1lIHQgPgp0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwgc2l6ZW9mICh0KSwgc3RkOjp0cnVlX3R5cGUgPjo6dHlwZQppc19jb21wbGV0ZV9mbiggdCAqICk7CgpzdGQ6OmZhbHNlX3R5cGUgaXNfY29tcGxldGVfZm4oIC4uLiApOwoKdGVtcGxhdGU8IHR5cGVuYW1lIHQsIGJvb2wgdmFsdWUgPSBkZWNsdHlwZSggaXNfY29tcGxldGVfZm4oICh0ICopIG51bGxwdHIgKSApOjp2YWx1ZSA+CnN0cnVjdCBpc19jb21wbGV0ZSA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8IGJvb2wsIHZhbHVlID4ge307CgpzdHJ1Y3QgcTsKCnZvaWQgYSgpIHsKICAgIHN0ZDo6Y291dCA8PCBpc19jb21wbGV0ZTwgcSA+Ojp2YWx1ZSA8PCAnXG4nOwp9CgpzdHJ1Y3QgcSB7fTsKCnZvaWQgYigpIHsKICAgIHN0ZDo6Y291dCA8PCBpc19jb21wbGV0ZTwgcSA+Ojp2YWx1ZSA8PCAnXG4nOwp9CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6Y291dC5zZXRmKCBzdGQ6Omlvczo6Ym9vbGFscGhhICk7CiAgICBhKCk7CiAgICBiKCk7Cn0=