可変個引数テンプレート関数での構造体の回避に示されているソリューションを必要に応じて適応させようとしています。しかし、G++ の動作がわかりません。次の関数を検討してください。
template <typename T, unsigned Size>
int nextline(const typename std::array<T, Size> ar) {
return 0;
}
その後、コール
nextline(std::array<int, 2> { 1,0 });
と不平を言うGCCと一致しません
eslong.cpp: In function ‘int main()’:
eslong.cpp:10:38: error: no matching function for call to ‘nextline(std::array<int, 2ul>)’
nextline(std::array<int, 2> { 1,0 });
^
eslong.cpp:10:38: note: candidate is:
eslong.cpp:4:5: note: template<class T, unsigned int Size> int nextline(std::array<T, Size>)
int nextline(const typename std::array<T, Size> ar) {
^
eslong.cpp:4:5: note: template argument deduction/substitution failed:
eslong.cpp:10:38: note: mismatched types ‘unsigned int’ and ‘#‘integer_cst’ not supported by dump_type#<type error>’
nextline(std::array<int, 2> { 1,0 });
^
eslong.cpp:10:38: note: ‘std::array<int, 2ul>’ is not derived from ‘std::array<T, Size>’
ただし、 orに変更unsigned Size
すると一致します。ここで何が起こっているのかよくわかりません。への呼び出しのパラメーターが に変換されていませんか?unsigned long Size
size_t
Size
std::array<T, Size>
size_t