Этот код прекрасно компилируется в g++ (coliru), но не в MSVC (godbolt и my 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): примечание: см. Использование этого
Какой (g++ или MSVC) не так?
Что this
в "увидеть использование" это ""??
Как обойти это, сохраняя при этом гарантию времени компиляции?
В моем реальном случае b (#1)
- сложное утверждение, зависящее от нескольких других переменных constexpr.