つまり,次のようなコードのコンパイルが通るようになってしまう.
template void f(Type t) {
Typo t; // 敢えてタイプミス
}
int main()
{
// fのインスタンス化はしていない
}
一方で,VC++をClangと同じようにする方法がある.プロジェクト設定のC/C++の言語から,準拠モードを「はい(/permissive-)」にすれば良い.
詳細についてはC++ Team Blogで紹介されている.
MS Docsによれば,Visual Studio 2017 15.5以降ではデフォルトでこの設定が「はい」になるとのこと.逆に言えば,それより前から継続して使っているプロジェクトには設定されていないということなので,何かのきっかけで新しいプロジェクトを追加した際などには,この設定の差が問題になるかもしれない.
0 件のコメント:
コメントを投稿