#include <cstdio>
template<int,typename> struct dummy;
int main()
{
const char ex1[] = "test";
const char ex2[] = {'t', 'e', 's', 't', '\0'};
auto ex3 = "test";
auto &ex4 = "test";
auto && ex5 = "test";
dummy<1,decltype(ex1)>{};
dummy<2,decltype(ex2)>{};
dummy<3,decltype(ex3)>{};
dummy<4,decltype(ex4)>{};
dummy<5,decltype(ex5)>{};
}
I2luY2x1ZGUgPGNzdGRpbz4KCnRlbXBsYXRlPGludCx0eXBlbmFtZT4gc3RydWN0IGR1bW15OwoKaW50IG1haW4oKQp7Cgljb25zdCBjaGFyIGV4MVtdID0gInRlc3QiOwoJY29uc3QgY2hhciBleDJbXSA9IHsndCcsICdlJywgJ3MnLCAndCcsICdcMCd9OwoJYXV0byBleDMgPSAidGVzdCI7CglhdXRvICZleDQgPSAidGVzdCI7CglhdXRvICYmIGV4NSA9ICJ0ZXN0IjsKCglkdW1teTwxLGRlY2x0eXBlKGV4MSk+e307CglkdW1teTwyLGRlY2x0eXBlKGV4Mik+e307CglkdW1teTwzLGRlY2x0eXBlKGV4Myk+e307CglkdW1teTw0LGRlY2x0eXBlKGV4NCk+e307CglkdW1teTw1LGRlY2x0eXBlKGV4NSk+e307Cn0=
prog.cpp: In function ‘int main()’:
prog.cpp:13:25: error: invalid use of incomplete type ‘struct dummy<1, const char [5]>’
dummy<1,decltype(ex1)>{};
^
prog.cpp:3:31: note: declaration of ‘struct dummy<1, const char [5]>’
template<int,typename> struct dummy;
^~~~~
prog.cpp:14:25: error: invalid use of incomplete type ‘struct dummy<2, const char [5]>’
dummy<2,decltype(ex2)>{};
^
prog.cpp:3:31: note: declaration of ‘struct dummy<2, const char [5]>’
template<int,typename> struct dummy;
^~~~~
prog.cpp:15:25: error: invalid use of incomplete type ‘struct dummy<3, const char*>’
dummy<3,decltype(ex3)>{};
^
prog.cpp:3:31: note: declaration of ‘struct dummy<3, const char*>’
template<int,typename> struct dummy;
^~~~~
prog.cpp:16:25: error: invalid use of incomplete type ‘struct dummy<4, const char (&)[5]>’
dummy<4,decltype(ex4)>{};
^
prog.cpp:3:31: note: declaration of ‘struct dummy<4, const char (&)[5]>’
template<int,typename> struct dummy;
^~~~~
prog.cpp:17:25: error: invalid use of incomplete type ‘struct dummy<5, const char (&)[5]>’
dummy<5,decltype(ex5)>{};
^
prog.cpp:3:31: note: declaration of ‘struct dummy<5, const char (&)[5]>’
template<int,typename> struct dummy;
^~~~~