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

--- Comment #5 from Mateusz Pusz <mateusz.pusz at gmail dot com> ---
(In reply to Mateusz Pusz from comment #3)
> (In reply to Marek Polacek from comment #1)
> > This compiles if I use {} instead of ():
> > 
> > struct gram : unit<ratio(std::milli{})> {};
> 
> (In reply to Marek Polacek from comment #2)
> > I think this is invalid.  [temp.arg]p2:
> > "In a template-argument, an ambiguity between a type-id and an expression is
> > resolved to a type-id, regardless of the form of the corresponding
> > template-parameter."
> > 
> > template<auto>
> > struct S { };
> > 
> > struct R { };
> > 
> > void
> > g (void)
> > {
> >   S<R()> s; // template argument treated as function type
> >   S<R{}> s2;
> >   S<int()> s3; // template argument treated as function type
> >   S<int{}> s4;
> > }
> 
> Please note that all of the following compiles fine and is not treated as a
> function type (most vexing parse)
> 
> constexpr auto r1(ratio(std::milli()));
> constexpr auto r2(ratio(std::milli()));
> constexpr ratio r3(std::milli());

My bad, that actually is a most vexing parse issue. Sorry!

Reply via email to