5

型が構築可能かどうかを調べるために静的チェックを実装したい:

#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 が機能しないのはなぜですか? ありがとう。

4

0 に答える 0