#include <vector>
#include <list>
#include <iostream>
template
<
typename T,
template<typename, typename = std::allocator<T>> class C,
typename = std::enable_if_t
<
std::is_same<std::vector<T>, C<T>>::value
>
>
void f(const C<T>& coll)
{
std::cout << "vector" << std::endl;
}
template
<
typename T,
template<typename, typename = std::allocator<T>> class C,
typename = std::enable_if_t
<
std::is_same<std::list<T>, C<T>>::value
>
>
void f(const C<T>& coll)
{
std::cout << "list" << std::endl;
}
int main()
{
std::vector<int> c1{ 1, 2, 3 };
std::list<int> c2{ 1, 2, 3 };
f(c1);
f(c2);
}
クラン3.8は文句:SFINAEがstd :: enable_if_tで動作しないのはなぜですか?
エラー:テンプレートパラメータがデフォルト引数を再定義:型名=のstd :: enable_if_t
は、コード内で何が悪いのでしょうか?
代わりに、 'enable_if_t * = nullptr'のような非タイプのテンプレートパラメータを使用しようとしましたか? –
私はそれを試みましたが、結果は同じです。 – xmllmx
私はそれが非タイプのテンプレートパラメータで動作するはずだと思います。このコードは不正です –