私は次の問題を抱えています:
「結果の」タイプを実際に評価せずに、2つのタイプを判別したいのですが、タイプがまったく存在しない可能性があるため、無効です。(C ++ 11のものは使用しないでください)
例:
#include <iostream>
#include <iterator>
template <bool B, typename T, typename F>
struct TemplateIf {
};
template <typename T, typename F>
struct TemplateIf<true, T, F> {
typedef T Result;
};
template <typename T, typename F>
struct TemplateIf<false, T, F> {
typedef F Result;
};
int main(int argc, char** argv)
{
// On GCC this is error as std::iterator_traits<int>::value_type doesn't exist
typename TemplateIf<true, int, std::iterator_traits<int>::value_type >::Result a;
a = 5;
std::cout << a << std::endl;
return 0;
}
どういうわけか決定できますか?(選択されたタイプは常に有効であると想定しますが、選択されていないタイプは無効である可能性があります)。