Re[2]: SFINAE? compiler bug?
От: remark Россия http://www.1024cores.net/
Дата: 24.09.07 12:17
Оценка:
Здравствуйте, remark, Вы писали:

R>Во-первых, 14.7.1/5

R>

R>If the overload resolution process can determine the correct function
R> to call without instantiating a class template definition, it is
R> unspecified whether that instantiation actually takes place. [Exam-
R> ple:
R> template <class T> struct S {
R> operator int();
R> };

R> void f(int);
R> void f(S<int>&);
R> void f(S<float>);

R> void g(S<int>& sr) {
R> f(sr); // instantiation of S<int> allowed but not required
R> // instantiation of S<float> allowed but not required
R> };
R> --end example]


R>Т.е. std::vector<Bar> может инстанциироваться в любом случае. Поведение unspecified. Поэтому разные компиляторы и компилируют по-разному.



Во-вторых, что бы воспользоваться SFINAE тебе надо сделать так, что бы получающееся выражение было синтаксически некорректным, а не просто приводило бы когда-то к какой-то ошибке. Например, ошибке линковки или ран-тайм ошибке.
В твоём случае std::vector<Bar> синтаксически корректно, и при этом само это выражение не приводит к инстанциированию функций-членов std::vector<Bar>, в которых как раз уже и пытаются создать абстрактный класс. Поэтому на фазе поиска подходящих функций невозможно ничего определить.


R>


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.