#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에서 작동하지 않는 이유는 무엇입니까?
오류 : 코드의 잘못 어떤 유형 이름 = 표준 : enable_if_t
: 템플릿 매개 변수는 기본 인수를 재정의?
대신에 'enable_if_t * = nullptr'과 같은 형식이 아닌 템플릿 매개 변수를 사용하려 했습니까? –
나는 그것을 시도했지만 그 결과는 동일하다. – xmllmx
나는 non-type 템플릿 매개 변수와 함께 작동해야한다고 생각합니다. 이 코드는 부적절합니다 –