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
)ではどのように処理されますか?これを可能にする新しい言語機能はありますか?
これはどのように実装されていますか?言語/コンパイラのサポートが必要ですか? –
@ZizhengTai:はい、それはコンパイラによって提供される魔法の一部です。あるいは、コンパイラ固有の手段を使って実装されています。 –
うん...それは奇妙なものです: -/ –