컴파일러에 추가 정보를 전달하는 구문으로 [[attributes]]라고 쓴다. 컴파일러에 의한 최적화 경고, 경고 추가 등을 할 수 있다.
[[noreturn]] void exit()
{
std::exit(0);
}
[[carries_dependency]] Hoge* is_load()
{
return x.load(std::memory_order_consume);
}
int main()
{
std::thread th([]() {
x.store(new Hoge{ 100 }, std::memory_order_release);
});
Hoge* pHoge = is_load();
if (pHoge)
{
std::cout << pHoge->hoge;
}
th.join();
return 0;
}
void func(int i)
{
switch (i)
{
case 1:
ret += 1;
[[fallthrough]]; // 의도적인 통과
case 2:
ret += 2;
break;
}
}
void func([[maybe_unused]]int param)
{
// param는 사용되지 않는다
}
[[nodiscard]]int * create()
{
return new int(0);
}
int main()
{
create(); // warning
return 0;
}
참고 : C++ - 표준 attribute 정리 https://jacking75.github.io/cpp_modern_cpp_attribute/