constexpr
functions不應該包含:在constexpr函數中允許什麼?
非文字類型
但在此答案的λ是一個所定義的變量的定義:https://stackoverflow.com/a/41616651/2642059
template <typename T>
constexpr auto make_div(const T quot, const T rem)
{
return [&]() {
decltype(std::div(quot, rem)) result;
result.quot = quot;
result.rem = rem;
return result;
}();
}
在我的評論中,我定義了div_t
中的一個:How can I Initialize a div_t Object?
template <typename T>
constexpr decltype(div(T{}, T{})) make_div(const T quot, const T rem)
{
decltype(div(T{}, T{})) x{};
x.quot = quot;
x.rem = rem;
return x;
}
究竟是什麼意思是禁止「定義非文字類型的變量」?
Visual Studio 2015不會允許我定義div_t
,但我覺得它可能只是將這種非法行爲包裝在lambda中並執行它是可以允許的。我想知道哪一個編譯器在div_t
定義方面表現正確。
什麼版本的C++語言?這些要求比2011年有所放鬆。 – rubenvb
@rubenvb好的問題,我編輯過。但是C++ 14。 –
lambda表達式是一個表達式,而不是一個變量定義。但是在C++ 17之前,lambda表達式不能出現在[常量表達式](http://en.cppreference.com/w/cpp/language/constant_expression)中。事實上,[當上下文需要不斷表達時,MSVC會抱怨](http://rextester.com/ZBRLBR12534)。 – cpplearner