xml*_*lmx 13 c++ standards alias c++17 structured-bindings
struct X { int a, b; };
int main()
{
auto p = std::pair{ 1, 2 };
const auto&[r1, r2] = p; // ok
X x{ 1, 2 };
const auto&[r3, r4] = x; // error
}
Run Code Online (Sandbox Code Playgroud)
clang 7.0(在Windows上)的错误信息:
error : cannot decompose this type; 'std::tuple_size<const X>::value' is not a valid
integral constant expression
Run Code Online (Sandbox Code Playgroud)
为什么结构化绑定在struct上不能按预期工作?
这是一个已知的错误.请参阅https://bugs.llvm.org/show_bug.cgi?id=33236.
基本上,问题是,C++ 17标准规定结构化绑定声明将其T
视为类似元组的类型,并std::tuple_size<T>::value
在std::tuple_size<T>
定义时使用; 但它也指定标准库std::tuple_size<T>
为所有const类型定义T
.
这意味着,在编译时const auto&[r3, r4] = x;
,Clang会查找std::tuple_size<const X>
,并在标准库中找到该定义(由MSVC提供).由于std::tuple_size<const X>
成功找到了定义,Clang尝试使用"类似元组"的绑定协议,它肯定会失败:const X
就像元组一样!
来自MSVC STL维护者的建议(来源):
解决方法:不要在struct上使用const.
归档时间: |
|
查看次数: |
880 次 |
最近记录: |