【问题标题】:Trying out [[nodiscard]] with no success尝试 [[nodiscard]] 没有成功
【发布时间】:2017-12-13 06:49:06
【问题描述】:

我正在尝试测试一点 C++17。我正在尝试做:

[[nodiscard]] int get_value1()
{
    return 42;
}

inline void start()
{
    // Should generate warning
    get_value1();
}

但是,事实并非如此。我正在使用 Visual Studio 2017。警告级别设置为 Level4(\W4)。我已将 C++ 语言标准设置为 ISO C++ 最新草案标准 (/std:c++latest)。

但它不会产生我想要的警告。这是为什么?另外,还有一个小问题:选择语言标准的选项卡仅出现在调试配置中,而不出现在发布中。这是为什么? Release 在 nodiscard 上报错,那是不是说 Release 是 C++14 的?

编辑:当然我的意思是第二部分的警告。已更正。 :)

【问题讨论】:

  • VS 还没有完全实现这些属性 AFAIK
  • 关于你关于发布的问题,我希望在没有优化的情况下使某些功能工作比使用优化更容易。
  • 是否有 Visual Studio 补丁说明/编译列表来介绍即将实现和/或将在即将发布的补丁中实现的功能,因为这将非常有帮助。
  • 你使用哪个 VS 2017?实际上 [[nodiscard]] 仅从 VS 2017.3 开始支持。
  • 我也认为要求的措辞有点偏离:"..编译器鼓励发出警告。"来源: en.cppreference.com/w/cpp/language/attributes当前草案中的相同措辞:open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf

标签: c++ visual-studio-2017 c++17 nodiscard


【解决方案1】:

实际上 [[nodiscard]] 仅在 VS 2017.3 之后才受支持,它应该给您一个警告,而不是 错误。据我了解,规范假定编译器可能会警告您。也可能不会。

【讨论】:

    猜你喜欢
    • 2016-03-16
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2011-03-19
    相关资源
    最近更新 更多