#include <type_traits>
template < std:: size_t ... Ts >
struct not_zero { } ;
template < std:: size_t N>
struct not_zero< N> : std:: integral_constant < bool , N> { } ;
template < std:: size_t N, std:: size_t ... Ts >
struct not_zero< N, Ts...> : std:: integral_constant < bool , N && not_zero< Ts...> :: value > { } ;
template < typename T, std:: size_t ... Ts >
struct Array
{
static_assert( not_zero< Ts...> :: value , "Dimension cannot be 0" ) ;
} ;
template struct Array< int , 3 > ;
template struct Array< int , 3 , 2 , 1 , 0 > ;
int main ( ) { }
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIFRzPgpzdHJ1Y3Qgbm90X3plcm8ge307Cgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4Kc3RydWN0IG5vdF96ZXJvPE4+IDogc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29sLCBOPiB7fTsKCnRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOLCBzdGQ6OnNpemVfdC4uLiBUcz4Kc3RydWN0IG5vdF96ZXJvPE4sIFRzLi4uPiA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgTiAmJiBub3RfemVybzxUcy4uLj46OnZhbHVlPiB7fTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdC4uLiBUcz4Kc3RydWN0IEFycmF5CnsKICAgIHN0YXRpY19hc3NlcnQobm90X3plcm88VHMuLi4+Ojp2YWx1ZSwgIkRpbWVuc2lvbiBjYW5ub3QgYmUgMCIpOwp9OwoKdGVtcGxhdGUgc3RydWN0IEFycmF5PGludCwgMz47CnRlbXBsYXRlIHN0cnVjdCBBcnJheTxpbnQsIDMsIDIsIDEsIDA+OwoKaW50IG1haW4gKCkge30=
compilation info
prog.cpp: In instantiation of ‘struct Array<int, 3u, 2u, 1u, 0u>’:
prog.cpp:19:17: required from here
prog.cpp:15:5: error: static assertion failed: Dimension cannot be 0
stdout