VS2015 скомпилирует и выполняет следующий фрагмент без проблем. g ++ и clang не связывают код, и я думаю, что они верны.Является ли мое понимание о [basic.link]/7 в N4140 правильным?
#include <iostream>
namespace X {
void p() {
void q(); // This is a block scope declaration of the function q() with external
// linkage (by §3.5/6), which then must be defined in namespace X,
// according to §3.5/7, and not in the global namespace.
q();
}
}
void q() { std::cout << "q()" << '\n'; }
int main()
{
X::p();
}
Почему NDR? Должен ли компоновщик сообщить об ошибке в этом случае? – Belloc
@Belloc Реализация должна, но не требуется. – Columbo
Откуда у вас этот номер? – Belloc