下記のコードがコンパイルエラーになりません.(Visual Studio 2022 を使用)
X::F2() の実装には問題があるはずですが,何のコンパイルエラーも出ません.(ビルド→実行 ができる)
C++
1#include <iostream> 2 3class X 4{ 5public: 6 void F1(){ std::cout << "F1\n"; } 7 X &F2(){ std::cout << "F2\n"; } //return *this; と書くつもりが忘れている 8}; 9 10int main() 11{ 12 X x; 13 x.F1(); 14 //x.F2(); //C4716 'X::F2' : 値を返さなければいけません 15 16 return 0; 17}
プロジェクトの設定で警告レベルを上げることで
warning C4514: 'X::F2': 参照されていないインライン関数は削除されました
という warning が出ることから
コンパイルエラーにならない原因は「使ってないから削除された」ことなのかと思いますが,
使っているかいないか以前に,まずコードとして問題があると思うのですが,その点がスルーされるのは何故なのでしょうか?
例えば,X::F2() の実装を void F2(){ std::cout << "F2\n"; cat; } とかにすれば,使ってなくても cat の部分がコンパイルエラーになるのですが,これとの差とは何になるのでしょうか?
エラーにならないという挙動が個人的に不便に思うのですが,これをコンパイルエラーにする方法とかありませんでしょうか?
(プロジェクト設定に「警告をエラーとして扱う」というのがありますが……それだと今度は他の警告もエラーになってしまうのが不便そう)
(「インライン」な形に書くこと自体をあきらめる?)
回答2件
あなたの回答
tips
プレビュー