Можете ли вы специализировать метод шаблона внутри класса шаблона, не специализируя параметр шаблона класса?
Обратите внимание, что специализация имеет значение параметра шаблона, а не его тип.
Это похоже на компиляцию в компиляторе Visual Studio 2008 SP1, но не в GCC 4.2.4.
#include <iostream>
using namespace std;
template <typename T>
class A
{
private:
template <bool b>
void testme();
template <>
void testme<true>() { cout << "true" << endl; };
template <>
void testme<false>() { cout << "false" << endl; };
public:
void test();
};
template<typename T> struct select {};
template<> struct select<int> { static const bool value = true; };
template<> struct select<double> { static const bool value = false; };
template <class T>
void A<T>::test() { testme<select<T>::value>(); }
int main(int argc, const char* argv[])
{
A<int> aInt;
A<double> aDouble;
aInt.test();
aDouble.test();
return 0;
}
GCC сообщает мне: "ошибка: явная специализация в области, не связанной с пространством имен," класс A ""
Если он не поддерживается в стандарте, может кто-нибудь сказать мне, почему?