【问题标题】:alignas(T) not resolved in template functionalignas(T) 未在模板函数中解析
【发布时间】:2013-09-28 04:30:09
【问题描述】:

使用Eclipse配合MinGW(version:4.8.1)编译如下代码片段可以通过,但Eclipse仍然报错: “此行有多个标记 - 无法解析类型 'alignas'”

template<typename X> void set_aside(std::vector<X> vx) {
    constexpr int max_buf = 1024;
    alignas(X) X buffer[max_buf];

    int max = min(vx.size(), max_buf / sizeof(X));
    std::uninitialized_copy(vx.begin(), vx.begin() + max, buffer);
}

这个问题发生了什么,虽然代码片段通过了编译,但 Eclipse 标记为错误。 有人遇到过这个问题吗?请帮我解决这个问题,非常感谢!

【问题讨论】:

  • 尝试在声明中将alignas(X)移动到X之后,我记得它有一个特定的顺序。
  • 虽然 ISO IEC 14882-2011 规范给出了上述代码片段的定义。以下是该规范的示例:alignas(T) T buffer[N]
  • 如果在 X 之后移动 alignas(X),编译器会报错“警告:属性忽略 [-Wattributes] X alignas(X) buffer[max_buf];”
  • 我猜 Eclipse 解析器不是最新的 C++11。如果您的 IDE 在编译器接受的内容上出错,请忽略 IDE。
  • 最新的 Eclipse Kepler 对静态语法检查有更好的 C++11 支持。

标签: c++ c++11 eclipse-cdt alignas


【解决方案1】:

许多 IDE 使用与其后端编译器不同的前端语法检查器。 Eclipse Kepler(2013 年 6 月发布)大部分是最新的 C++11 语法,尽管可能不完全支持对齐支持以及与类内初始化程序和默认构造函数的交互等某些内容(目前)。同样,如果后端编译器使用 std=C++1y 调用,C++14 功能(如 decltype(auto))将起作用,但前端语法检查器无法识别。

注意:这不是 Eclipse 独有的,Visual C++ Intellisense 有时也会在实际编译器后面运行(尤其是在 CTP 版本中),从而导致红色波浪线。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多