Скажем есть такая конструкция
template <int D> struct A{
template <int ... args> void foo(){...}
};
sizeof...(args)==D
И как сделать, что бы сообщение о такой ошибке было вменяемым (понятным для пользователя в общем далекого от всей этой кухни)?
Я пока придумал только такое:
template <int D> struct Dcheck{};
template <int D> struct A{
void foo_checker(Dcheck<D>){}
template <int ... args> void foo(){
foo_checker(Dcheck<sizeof ... (args)>());
}
};
int main(){
A<3> a;
a.foo<1,2>();
return 0;
}
$ g++ -std=c++0x test.cpp
test.cpp: In member function ‘void A<D>::foo() [with int ...args = 1, 2, int D = 3]’:
test.cpp:22: instantiated from here
test.cpp:15: error: no matching function for call to ‘A<3>::foo_checker(Dcheck<2>)’
test.cpp:13: note: candidates are: void A<D>::foo_checker(Dcheck<D>) [with int D = 3]