Ich habe folgendes Problem:
Ich möchte zwischen zwei Typen bestimmen, ohne die "resultierenden" Typen tatsächlich auszuwerten - da der Typ möglicherweise gar nicht existiert, also ungültig ist. (Bitte kein C++11-Zeug)
Beispiel:
#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;
}
Kann sie irgendwie bestimmt werden? (Angenommen, der gewählte Typ ist immer gültig, aber der nicht gewählte Typ kann ungültig sein).