template < typename ...>
struct Seq;
template < typename >
struct always_false
{
static constexpr bool value = false ;
} ;
template < typename , typename = void >
struct car;
template < typename head, typename ... tail , typename dummy>
struct car< Seq< head, tail...> , dummy>
{
typedef head type;
} ;
template < typename dummy>
struct car< Seq<> , dummy>
{
static_assert( always_false< dummy> :: value , "car of empty Seq" ) ;
} ;
#include <iostream>
#include <typeinfo>
int main( )
{
car< Seq<>> error;
}
dGVtcGxhdGUgPHR5cGVuYW1lLi4uPgpzdHJ1Y3QgU2VxOwoKdGVtcGxhdGUgPHR5cGVuYW1lPgpzdHJ1Y3QgYWx3YXlzX2ZhbHNlCnsKCXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9IGZhbHNlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+CnN0cnVjdCBjYXI7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgaGVhZCwgdHlwZW5hbWUuLi4gdGFpbCwgdHlwZW5hbWUgZHVtbXk+CnN0cnVjdCBjYXI8U2VxPGhlYWQsIHRhaWwuLi4+LCBkdW1teT4KewoJdHlwZWRlZiBoZWFkIHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgZHVtbXk+CnN0cnVjdCBjYXI8U2VxPD4sIGR1bW15Pgp7CglzdGF0aWNfYXNzZXJ0KGFsd2F5c19mYWxzZTxkdW1teT46OnZhbHVlLCAiY2FyIG9mIGVtcHR5IFNlcSIpOwp9OwoKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CgppbnQgbWFpbigpCnsKCWNhcjxTZXE8Pj4gZXJyb3I7Cn0=
compilation info
prog.cpp: In instantiation of ‘struct car<Seq<> >’:
prog.cpp:30:13: required from here
prog.cpp:22:2: error: static assertion failed: car of empty Seq
static_assert(always_false<dummy>::value, "car of empty Seq");
^
prog.cpp: In function ‘int main()’:
prog.cpp:30:13: warning: unused variable ‘error’ [-Wunused-variable]
car<Seq<>> error;
^
stdout