是否有可能驗證傳遞給constexpr
構造函數的初始化程序列表是否具有一定的大小?或者這隻能在運行時才能做到?如何static_assert初始化程序列表是一定的大小
這是想法,但它不工作:
struct group
{
constexpr group(
std::initializer_list<std::initializer_list<UINT const> const> groups
)
{
static_assert(each_list_size_greater_than_1(groups.begin(), groups.end()));
}
constexpr static bool each_list_size_greater_than_1(
std::initializer_list<std::initializer_list<UINT const> const>::const_iterator const begin
, std::initializer_list<std::initializer_list<UINT const> const>::const_iterator const end)
{
return begin == end || begin->size() > 1 && each_list_size_greater_than_1(begin + 1, end);
}
};
我看VS2015的std::initializer_list
實施和begin()
,end()
和size()
都是constexpr
功能。
上一條語句的含義是什麼:'到目前爲止,只有改變模板參數和/或它們的數量,才能得到不同的返回類型。 – Adrian
@Adrian:根據C++標準,至少達到C++ 1z,您不能根據函數參數的_value_爲函數創建不同的返回類型。您需要更改該函數的_type_以更改其返回類型。我意識到你並沒有真正想改變函數的返回類型,而只是使用一個參數值作爲'constexpr'。但是,如果參數值可以用作函數中的'constexpr',則可以在返回類型中使用相同的值,從而使目前不允許的東西成爲可能。 –