私は C++0x コードではなく、通常の C++ に苦労しています。通常の C++ を使わなければならない理由を聞かないでください。
だからここにあります:いくつかのステートメントが真または偽であることに関して、列挙型の値を1または0にする必要があります。もちろん、列挙型に 0 を含む構造体をテンプレート化し、列挙型に 0 ではなく 1 を含む 2 番目のステートメントで特殊化しました。
私にはかなり正当に思えますが、専門化のパラメーターを使用する必要があることがわかります。可能な限りすべての方法で使用しようとしたため、このエラーが発生し続けたため、これはちょっと奇妙です。
コードは次のとおりです。
template<typename T>
struct CanPrint
{
template<size_t>
struct Value { enum { val = 0 }; };
template<size_t>
struct Value<sizeof(True)> { enum { val = 1 }; };
enum
{ value = Value<sizeof(IsTrue<T>(0))>::val };
};
部分的な特殊化でなければうまくいくと思いますが、明示的な特殊化は名前空間スコープではできません。そして明らかに、両方のテンプレートを特殊化せずにテンプレート内でテンプレートを特殊化することはできません。できますか?