2016-07-17 3 views
0

クラスTにコンパイル時にfinalとマークされているかどうかを確認することはできますか?私はthis answerのアプローチ変更しようとしてきた:最終クラスを検出するための特性

template<typename T> 
struct sub { 
    using type = struct : T {}; 
}; 

template<typename T> 
struct is_final { 
    using yes = char; 
    using no = struct { char arr[2]; }; 

    template<typename U> static yes test(...); 
    template<typename U> static no test(typename sub<U>::type*); 

public: 
    static constexpr bool value = sizeof (test<T>(nullptr)) == sizeof (yes); 
}; 

をしかし、それは動作しません。 is_final<T>::valueは常にfalseです。 SFINAEはそのようには機能しないようです。

この特性をC++ 11で実装することができない場合、C++ 14(std::is_final)ではどのように処理されますか?これを可能にする新しい言語機能はありますか?

答えて

7

ここの情報に基づいて、この回答の後に質問は根本的に変更されました。質問の進化を追うつもりはない。

ただstd::is_finalを使用してください。

                     

+0

これはどのように実装されていますか?言語/コンパイラのサポートが必要ですか? –

+0

@ZizhengTai:はい、それはコンパイラによって提供される魔法の一部です。あるいは、コンパイラ固有の手段を使って実装されています。 –

+0

うん...それは奇妙なものです: -/ –

関連する問題