我有以下问题:
我想在不实际评估“结果”类型的情况下确定两种类型 - 因为该类型可能根本不存在 - 是无效的。(请不要使用 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;
}
它可以以某种方式确定吗?(假设选择的类型始终有效,但未选择的类型可能无效)。