Здравствуйте, 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.