https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86883
Bug ID: 86883
Summary: Unexpected error: expansion pattern '<anonymous>'
contains no argument packs
Product: gcc
Version: 8.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: v.reshetnikov at gmail dot com
Target Milestone: ---
/****************** BEGIN SOURCE ******************/
template<class... T>
struct A {
template<template<T...> class Head, T... Args>
static constexpr Head<Args...> foo = { };
};
template<int x>
struct C {
static constexpr auto value = x;
};
using type = decltype(A<int>::foo<C, 1>);
static_assert(type::value == 1);
/******************* END SOURCE *******************/
The g++ 8.2.0 compiler rejects this code:
/****************** BEGIN OUTPUT ******************/
<source>:4:34: error: expansion pattern '<anonymous>' contains no argument
packs
static constexpr Head<Args...> foo = { };
^
/******************* END OUTPUT *******************/
I believe the code is correct and should be compiled successfully. For
comparison, Clang accepts it.