
MSVC에서는 C++ 함수 선언에서 [[nodiscard]]를 static 뒤에 두면 반환값을 버려도 경고가 나오지 않을 수 있다. Visual Studio 2022에서 C++20 모드와 /W4로 컴파일한 사례에서는 속성을 static 앞에 두자 경고가 발생했다.
다음처럼 속성을 static 뒤에 두면 함수의 반환값을 사용하지 않아도 MSVC에서 코드가 컴파일된다.
static [[nodiscard]] int GetSomething()
{
return 64;
}
int main()
{
GetSomething();
}
이 사례에서는 경고 수준을 4로 설정해도 경고가 나오지 않았다. 속성 위치를 바꿔 static 앞에 두면 MSVC가 반환값을 버렸다는 경고 C4834를 표시한다.
// Was:
// static [[nodiscard]] int GetSomething()
//
// Now put [[nodiscard]] at the beginning of the line,
// before "static":
//
[[nodiscard]] static int GetSomething()
{
return 64;
}
자료에 따르면 Clang과 GCC는 [[nodiscard]]가 잘못된 위치에 있는 코드를 거부하지만, MSVC는 이를 조용히 받아들인다. MSVC를 사용한다면 속성을 static 앞에 배치해야 반환값을 버릴 때 경고를 받을 수 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요