Возможная ошибка компилятора VC ++ 17 с if constexpr?

Играя с некоторыми из новых функций C ++ 17 в Visual C ++ — я столкнулся с проблемой, которая мне кажется ошибкой. Кажется, что код генерируется, как и ожидалось, при компиляции под другими компиляторами с использованием проводника компилятора. Ошибка, которая генерируется:

Компилятор Explorer Link

Использование Visual Studio 2017 15.3.5

error C2027: use of undefined type 'std::tuple<unknown-type>'

note: see declaration of 'std::tuple<unknown-type>'

note: see reference to function template instantiation 'void DoSomething<>(void)' being compiled

error C2903: 'remove_reference_t': symbol is neither a class template nor a function template
#include <type_traits>
#include <tuple>

struct t_metadata
{
using type = int;
};template<typename ...Types>
void DoSomething()
{
if constexpr (sizeof...(Types) < 1)
{
DoSomething<Types..., t_metadata>();
}
else
{
using T1 = std::remove_reference_t<decltype(std::get<0>(std::tuple<Types...>{}))>;
typename T1::type tempVal{ };
}
}

int main()
{
DoSomething<>();
return 0;
}

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]