为什么SFINAE在这里不起作用

时间:2013-01-16 10:05:49

标签: c++ sfinae

我想实现静态检查以找出type constructible:

#include <iostream>

template<typename T>
struct IsConstr
{
    typedef char TrueType;
    typedef struct{char a[2];} FalseType;
    template<typename C>
    static decltype((C(),TrueType())) test(int);
    template<typename C>
    static FalseType test(...);

    enum{value=(sizeof(test<T>(0))==sizeof(TrueType))};
}; 


struct S{private: S();};
int main()
{
    std::cout<<IsConstr<S>::value<<std::endl;
    std::cout<<IsConstr<int>::value<<std::endl;
    return 0;
}

代码无法编译,显示错误

  

“替换失败。'S :: S()'是私有的”。

为什么SFINAE不在这里工作? 感谢。

0 个答案:

没有答案