#include <vector>
#include <list>
#include <algorithm>
namespace stdx
{
template<class T>
struct _is_std_list: public std::false_type
{
};
template<class T, class AllocatorT >
struct _is_std_list<std::list<T, AllocatorT> > : public std::true_type
{
};
//1 вариант
template<class ListType,class = std::enable_if_t<_is_std_list<ListType>::value > >
inline void sort(ListType& _List)
{
_List.sort();
}
template<class ListType, class = std::enable_if_t<!_is_std_list<ListType>::value > >
inline void sort(ListType& _List)
{
std::sort(std::begin(_List),std::end(_List));
}
/* //2-й вариант
template<class ListType >
inline std::enable_if_t<_is_std_list<ListType>::value > sort(ListType& _List)
{
_List.sort();
}
template<class ListType >
inline std::enable_if_t<!_is_std_list<ListType>::value > sort(ListType& _List)
{
std::sort(std::begin(_List), std::end(_List));
}
*/
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
{
std::vector<long> test = {1,-1,2,10,3};
stdx::sort(test); //Error C2995 'void stdx::sort(ListType &)': function template has already been defined test d : \prjvc\test\test\test.cpp 122
}
{
std::list<long> test = { 1,-1,2,10,3 };
stdx::sort(test); //Error C2995 'void stdx::sort(ListType &)': function template has already been defined test d : \prjvc\test\test\test.cpp 122
}
return nRetCode;
}
Почему 1-й вариант в отличие от 2-го не компилируется?
В чем разница?