https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66766

            Bug ID: 66766
           Summary: Reference to an “auto” function as a template
                    parameter
           Product: gcc
           Version: 5.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: quentin.c.diaz at gmail dot com
  Target Milestone: ---

The following code :

template <void (&a)()>
struct Foo {
    static auto value() {}
};

void bar() {}

template struct Foo<Foo<bar>::value>;

Causes the following error :

error: could not convert template argument ‘Foo<a>::value<bar>’ to ‘void (&)()’
 template struct Foo<Foo<bar>::value>;
                                    ^

Any of the following makes it compile successfully :
 - Declaring value() as returning void instead of deducing it
 - "Dereferencing" value : template struct Foo<*Foo<bar>::value>;
 - Parenthesizing value : template struct Foo<(Foo<bar>::value)>;
 - Making a a pointer : template <void (*a)()> struct Foo ...

Reply via email to