Это компилятор или только я: Наследование из вариационного шаблона, состоящего из lambdas

У меня есть код, который работает под GCC, но не скомпилирован в Visual Studio 2015 (который, как я понимаю, находится в разработке, но эта область, я думаю, должна быть реализована).

template< typename... T >
class inherit : public T...
{
public:
inherit(T... t) : T(t)... {}
};

int main() {
  auto l1 = []() {};
  auto l2 = []() {};
  inherit<decltype(l1), decltype(l2)> test(l1, l2);
  return 0;
}

То, что фрагмент кода сводится к чистой сути его. Visual Studio говорит "синтаксическая ошибка:" тип "в конструкторе inherit. Затем он выводит небольшой след о том, как он туда попал, и заканчивается словами" вы не можете построить экземпляр лямбды".

Мое предположение состоит в том, что разложение T (t)... не расширяется правильно. Однако я вполне могу получить синтаксис неправильно.

EDIT: Извините, вопрос: я виноват здесь или нет? Если да, то какой правильный синтаксис?

ДОПОЛНИТЕЛЬНОЕ НАЙТИ: В соответствии с ответами, которые у меня были, это похоже на проблему с Visual Studio 2015 с ошибкой в ​​этой области. В тестировании кажется его расширением, где параметры конструктора передаются базовым классам лямбда, которые имеют проблему. Следующий тест работает в VS2015:

template< typename T1, typename T2, typename... T3 >
class inherit2 : public T3...
{
public:
  inherit2(T1 t1, T2 t2) : T1(t1), T2(t2) {}
};

int main() {
  auto l1 = []() {};
  auto l2 = []() {};
  inherit2<decltype(l1), decltype(l2), decltype(l1), decltype(l2)> test(l1, l2);
  return 0;
}

Ответ 1

Это компилятор. A более поздний MSVC, v. 19.00.23106.0 с июля 2015 года, принимает ваш пример как есть.

Возможно, синтаксис синтаксиса привязки T{t}... мог бы помочь. Однако я не могу найти подходящий онлайн-компилятор.