【问题标题】:intel compiler buggy remarks for variadic templates?可变参数模板的英特尔编译器错误注释?
【发布时间】:2014-10-30 08:53:55
【问题描述】:

我使用 intel 编译器,因为 intel 并不真正支持 -Wall,所以我使用 -Wremarks 警告...

我有这个简单的代码,它只是制作一个特定的对象..

    template<typename... Args_t>
    static inline Obj makeObj(Args_t&&... args) {
        auto obj = std::make_shared<Obj>(args...); // probably can forward but doesn't matter..
        return obj;
    }

我明白了:

remark #869: parameter "args" was never referenced

这是一个错误吗?有人看过吗?

【问题讨论】:

  • 您确定您的编译器与 C++11 兼容(使用您正在使用的编译器标志)吗?
  • 是的,因为它有效。
  • 编译器从哪里获得有关 Obj 的信息?它不是您模板的一部分。不仅如此。您的返回类型是 Obj 并且您正在返回 shared_ptr.

标签: c++ intel compiler-warnings variadic-templates icc


【解决方案1】:

这只是一个错误的警告that was already reported in the Intel forum。它没有任何特殊含义,因为代码完全没问题(尽管您应该考虑完美转发)。

【讨论】:

    【解决方案2】:

    如果您一直使用英特尔编译器版本 15,我找到了以下解决方法。也许它也适合你

    template<typename... Args_t>
    static inline Obj makeObj(Args_t&&... args) {
        [&args...]{}(); // WORKAROUND 
        // ... your other code
        return obj;
    }
    

    只有 lambda 才能解决它。显然 lamdba 捕获包实际上使用参数包。但是扩展包不会以同样的方式“使用”包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-27
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 2010-12-25
      • 2020-02-05
      相关资源
      最近更新 更多