Вот на таком коде, содержащем ошибку микрософтовский компилер (8.0.50727.42) падает. На солярке gcc (3.4.6) не падает и успешно диагностирует ошибку. Другого юникса под рукой не было. Посмотрите, как жуется на 4 версии gcc
struct s1{};
struct s2{};
struct s3{};
class bug
{
public:
template <typename T> const T & get()
{
throw std::runtime_error("not specialized");
}
template <> const s1 & get()
{
return gets1();
}
template <> const s2 get(const s3 & _s3);
{
return gets2(_s3);
}
private;
s1 locals1;
s2 locals2;
const s1 & gets1()
{
return locals1;
}
const s2 & gets2(const s3 & _s3)
{
return locals2;
}
};
int main()
{
return 0;
}