более зависимые типы с вариационными шаблонами

Это следует вчерашний вопрос, где я дал немного кода на C ++, который Visual Studio 2013 не мог обработать, и @ galop1n любезно предоставил обходной путь, который отлично подошел для этого случая. Но теперь я пошел немного дальше, и Visual Studio снова приносит мне горе.

template <typename T>
using ValueType = typename T::value_type;

template<typename... Containers>
void
foo(const Containers &...args) {
std::tuple<ValueType<Containers>...> x;
}

template<typename... Containers>
struct Foo {
std::tuple<ValueType<Containers>...> x;
};

Всякий раз, когда я пытаюсь создать экземпляр шаблона функции foo или шаблона класса Foo, я получаю следующие два сообщения:

Test.cpp (21): ошибка C3546: ‘…’: нет доступных пакетов параметров для расширения

а также

Test.cpp (21): ошибка C3203: «ValueType»: шаблон специализированного псевдонима нельзя использовать в качестве аргумента шаблона для параметра шаблона «_Types», ожидается реальный тип

В каждом случае (создание экземпляра foo или создание экземпляра Foo) оба сообщения указывают на строку, которая определяет «x».

ОБНОВЛЕНИЕ: мой Отчет об ошибках Microsoft Теперь есть (в приложении) все основные варианты этой проблемы. Так что это будет место, чтобы посмотреть на исправление.

2

Решение

Может быть, следующие работы на VS2013 (более подробно: /):

template<typename... Containers>
void foo(const Containers &...args) {
std::tuple<typename std::decay<decltype(*args.begin())>::type...> x;
}

template<typename... Containers>
struct Foo {
std::tuple<typename std::decay<decltype(*std::declval<Containers>().begin())>::type...> x;
};
0

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

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

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