#include <type_traits>
template < typename >
struct dependent_false { enum { value = false } ; } ;
template < typename T>
struct foo : std:: false_type { static_assert( dependent_false< T> :: value , "Not lazy!" ) ; } ;
template <>
struct foo< int > : std:: true_type { } ;
template < typename T>
struct bar : foo< T> { } ;
template < typename ... T >
struct And : std:: true_type { } ;
template < typename T, typename ... Ts >
struct And< T, Ts...> : std:: integral_constant < bool , T:: value && And< Ts...> :: value > { } ;
int main( ) {
return And< std:: false_type , bar< double >> :: value ;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdGVtcGxhdGUgPHR5cGVuYW1lPgpzdHJ1Y3QgZGVwZW5kZW50X2ZhbHNlIHsgZW51bSB7IHZhbHVlID0gZmFsc2UgfTsgfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgZm9vIDogc3RkOjpmYWxzZV90eXBlIHsgc3RhdGljX2Fzc2VydChkZXBlbmRlbnRfZmFsc2U8VD46OnZhbHVlLCAiTm90IGxhenkhIik7IH07CnRlbXBsYXRlIDw+CnN0cnVjdCBmb288aW50PiA6IHN0ZDo6dHJ1ZV90eXBlIHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBiYXIgOiBmb288VD4ge307Cgp0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPgpzdHJ1Y3QgQW5kIDogc3RkOjp0cnVlX3R5cGUge307Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4Kc3RydWN0IEFuZDxULCBUcy4uLj46IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgVDo6dmFsdWUgJiYgQW5kPFRzLi4uPjo6dmFsdWU+IHt9OwoKaW50IG1haW4oKSB7CiAgICByZXR1cm4gQW5kPHN0ZDo6ZmFsc2VfdHlwZSwgYmFyPGRvdWJsZT4+Ojp2YWx1ZTsKfQo=
compilation info
prog.cpp: In instantiation of 'foo<double>':
prog.cpp:12:21: instantiated from 'bar<double>'
prog.cpp:18:83: instantiated from 'And<bar<double> >'
prog.cpp:18:83: instantiated from 'And<std::integral_constant<bool, false>, bar<double> >'
prog.cpp:21:45: instantiated from here
prog.cpp:7:32: error: static assertion failed: "Not lazy!"
stdout