Re: Нестандартное (?) поведение MSVC 2008 (темплейты)
От: Caracrist https://1pwd.org/
Дата: 04.03.11 20:44
Оценка:
Здравствуйте, 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.
~~~~~
~lol~~
~~~ Single Password Solution
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.