5
VS2015は問題なく次のスニペットをコンパイルして実行します。 g ++とclangはコードをリンクしていないので、正しいと思います。N4140の[basic.link]/7に関する私の理解は正しいですか?
#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
どこからこのNDRを取得しましたか? – Belloc