无法编译C ++ 17结构化绑定

时间:2019-01-03 19:43:28

标签: c++ c++17 clion

以下代码

#include <iostream>
#include <tuple>

int main()
{
    auto [i, c, d] = std::make_tuple(1, 'a', 2.3);
    std::cout << "i=" << i << " c=" << c << " d=" << d << '\n';
    return 0;
}

在我的计算机上无法编译。我收到这些错误消息:

error: use of undeclared identifier 'i'
error: expected unqualified-id

以及其他一些相同类型的

我正在使用:Mac OS X 10.11.6 El Capitan,CLion。创建项目时,我没有选择C ++ 17选项,并且我的CMakeList.txt包含以下行:set(CMAKE_CXX_STANDARD 17)

clang --version-Apple LLVM版本8.0.0(clang-800.0.42.1)

我需要做什么来编译此代码?

1 个答案:

答案 0 :(得分:1)

就像@Eljay在评论中说的那样,旧版本的clang确实没有(完全)对C ++ 17的支持。

我已复制没有CLion的问题。

在10.11.6机器上,使用“ Apple LLVM版本8.0.0(clang-800.0.42.1)”

clang++ -std=c++1z junk.cpp

给出了OP报告的错误。 (请注意,-std=c++17在这里不是有效的选项-稍后出现)

在10.14.2的计算机上,使用“ Apple LLVM版本10.0.0(clang-1000.10.44.4)”

clang++ -std=c++17 junk.cpp

编译时没有错误。