Re[6]: Ошибка, если конструктор определен в h-файле (этюд?)
От: andrey.desman  
Дата: 05.07.23 16:19
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Я ожидал, что на строчке Class1(), где вызывается конструктор MyPtr, в свою очередь вызывающий конструктор Class2() программа не скомпилируется, т.к. на момент компиляции этой строки компилятор ещё не увидел полное объявление Class2 и не знает, есть ли у него публичный конструктор.

vsb>Однако же: компилируется. При этом если добавить классу Class2 приватный конструктор, то не компилируется, причём ошибка ссылается вперёд, туда, куда вроде как компилятор ещё не успел дойти.
vsb>Извиняюсь за дезинформацию, моё понимание С++ в данном случае подвело и я не знаю, почему так происходит.

Как минимум

https://timsong-cpp.github.io/cppwp/n4659/temp.dep.res#temp.point-8

A specialization for a function template, a member function template, or of a member function or static data member of a class template may have multiple points of instantiations within a translation unit, and in addition to the points of instantiation described above, for any such specialization that has a point of instantiation within the translation unit, the end of the translation unit is also considered a point of instantiation.


А там для зависимых имен кандидаты берутся из пространств имен, связанных с instantiation context.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.