考虑以下代码片段来测试即将到来的 C++17 功能分解声明(以前称为结构化绑定)
#include <cassert>
#include <utility>
constexpr auto divmod(int n, int d)
{
return std::make_pair(n / d, n % d); // in g++7, also just std::pair{n/d, n%d}
}
int main()
{
constexpr auto [q, r] = divmod(10, 3);
static_assert(q == 3 && r ==1);
}
这在 g++7-SVN 和 clang-4.0-SVN 上都失败,并显示以下消息:
分解声明不能声明为“constexpr”
删除constexpr
定义并更改为常规assert()
适用于两个编译器。
关于这个特性的 WG21 论文都没有提到constexpr
关键字,无论是正面还是负面。
问题:为什么不允许分解声明constexpr
?(除了“因为标准这么说”)。