Здравствуйте, eramart, Вы писали:
E>Следующий код в MSVC 2008 компилится:
E>E>template <typename S, typename T>
E>class someclass : public non_existent_class
E>{
E>T operator() (S s) const {
E> return T(s);
// you can replace it with something like: return abrakadabra(s);
E>}
E>};
E>
E>Вопрос — а должен? Ни один другой компилятор из проверенных (GCC 4.5.0, Intel, Online Comeau, VS 2005) не скомпилировал с вполне логичной ошибкой об отсутствии "non_existent_class". Возможно, в C++0x есть что-то, объясняющее данное поведение?
Очень просто. Ты не используешь этот класс. Любой template класс генерируется в месте использования. Нет ни какой причины не компилировать этот код.
Давай поставлю тебя на место компилятора. Вот ты компилируешь cpp и встречаешь в одном из включённых файлов такой класс. Выдать ошибку?
1. Если да(выдать). То что делать с другим cpp в котором сначала включён файл с реализацией non_existent_class, а потом уже использование someclass. Такое должно быть валидным.
2. Если нет(не выдавать). То так и на каждый другой не будет смысла выдавать ошибку. (это ожидаемое поведение)
Вывод: либо ты компилировал разный код в разных компиляторах. в ( GCC 4.5.0, Intel, Online Comeau, VS 2005) добавил ещё и использование.
либо баг скорее в них, а не в VS 2008.