//more code omitted that is not relevant, the IF template is not completely shown here
template <bool condition, typename ThenType, typename ElseType>
struct IF {
typedef typename ChooseSelector<condition>::RETURN Selector;
};
template <bool condition>
struct ChooseSelector {
typedef SelectThen RETURN;
};
template <>
struct ChooseSelector<false> {
typedef SelectElse RETURN;
};
//SelectElse and SelectThen omitted
Я получаю Expected nested-name-specifier before ‘ChooseSelector’
. Согласно часто связываемому описанию C ++ typename и, если я правильно понял, здесь нужен typename
. Если я удаляю typename из шаблона IF, я все равно получаю ту же ошибку, поэтому я немного запутался, что на самом деле вызывает ошибку. Я прочитал много ответов, которые предполагают, что удаление typename решает проблему, но в данном случае это не так. Чего мне не хватает?
Ошибка происходит от g ++ в Linux, VS10 также выдает ошибку.