Это следует за yesterday's question, где я дал некоторый код 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': unspecia lized шаблона псевдонима не может быть использован в качестве аргумента шаблона для параметра шаблона «_Types», как ожидается реальный тип
В каждом случае (инстанцировании Foo или инстанцировании Foo), оба сообщения указывают на линии, которая определяет «х ».
ОБНОВЛЕНИЕ: Мой Microsoft bug report теперь имеет (в своем приложении) все основные варианты этой проблемы. Таким образом, это будет место для наблюдения за исправлением.
Человек, ты просто в сосать-землю, еще раз, * Оба * работа безупречного на моем Mac звоном (лязг-500.2.79) (на основе LLVM 3.3svn). тьфу. У меня нет моего VS2013 и работаю, поэтому сохраните мне некоторые набрав и скажите, поддерживает VS2013 параметры шаблона шаблона? если это так, может быть другая работа (по крайней мере, у меня, у кого-то могут быть и другие идеи, очевидно). Изменить: поцарапать это, не собираюсь работать, как я хотел. Тьфу. – WhozCraig
Возможно использование классической мета-функции вместо псевдонима типа может работать, например. 'template struct value_type {typedef typename T :: value_type type; }; ' –
pmr
@pmr, вы определяете« тип »с помощью typedef внутри класса шаблона, который аналогичен контейнерам« value_type »; поэтому проблема для кода приложения, обращающегося к вашему «типу», по сути, является одной и той же проблемой заново, верно? – slyqualin