Этот код прекрасно компилируется в g ++ ( coliru ), но не MSVC ( godbolt и мой VS2017).
#include <type_traits>
#include <iostream>
template<class T> void f(){
constexpr bool b=std::is_same_v<T,int>; //#1
auto func_x=[&](){
if constexpr(b){ //#error
}else{
}
};
func_x();
}
int main(){
f<int>();
}
(6): ошибка C2131: выражение не оценивается как константа
(6): примечание: сбой был вызван чтением переменной за пределами ее времени жизни
(6): примечание: см. Использование 'this'
Какой из них (g ++ или MSVC) неправильный?
Что такое this
в ", см. Использование" this " "??
Как обойти это, сохраняя при этом гарантию времени компиляции?
В моем реальном случае b (#1)
- сложное утверждение, зависящее от нескольких других переменных constexpr.