1
私は(C++ 17個の機能を使用して)次のことを達成しようとしています:グラムで私に次のエラーを与える非タイプの部分特殊化タプルが使用されないのはなぜですか?
#include <type_traits>
template<auto value_>
using constant_t = std::integral_constant<decltype(value_), value_>;
template<typename ... > class Tuple {};
template<auto ... values_>
class Tuple<constant_t<values_> ... > {};
int main(void)
{
Tuple<int, int, char> types;
Tuple<1, 2, 3> values;
}
++ - 7.1.0
main.cpp: In function ‘int main()’:
main.cpp:15:18: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ...> class Tuple’
Tuple<1, 2, 3> values;
^
main.cpp:15:18: note: expected a type, got ‘1’
main.cpp:15:18: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ...> class Tuple’
main.cpp:15:18: note: expected a type, got ‘2’
main.cpp:15:18: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ...> class Tuple’
main.cpp:15:18: note: expected a type, got ‘3’
、なぜ一部の誰もが説明できますTuple<1, 2, 3>
の特化は有効になりませんか?
私は(エイリアス) –
を避けようとしてきましたが、大丈夫ですが、なぜプライマリテンプレートを値を受け入れるように変更できないのかについての説明がありますか? –
@FletcherBlight - 特化の本質によって。値は、より特殊化された型の型ではありません。それはちょうど*型を持っています。それが型を持っているという事実は型の代わりに使うことを許しません。 – StoryTeller