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

--- Comment #2 from Tobias Schlüter <tobi at gcc dot gnu.org> ---
Here's another way to trigger this, inspired by my other PR101435
(https://godbolt.org/z/no6aEqvh3):
===============================
template<typename U, int dim>
class X {
    public:
    U v;

    using Scalar = U;
    static constexpr auto Dim = dim;

    explicit X(U x) : v(x) {}

    template<typename T>
    X<T, dim> cast()
    {
        return X<T, dim>(T{v});
    }
};

void f(int err) {
    auto propertyHelper = [err]<typename  M>(M&& fallback) -> M {
        using FloatM = X<float, M::Dim>;
        FloatM v{0};
        return err == 0 ? M{ v.template cast<typename M::Scalar>(); } :
fallback;
    };
}
=======================
Which gives a comically wrong cascade of errors:
---------------------------
<source>: In lambda function:
<source>:23:28: error: expected primary-expression before '{' token
   23 |         return err == 0 ? M{ v.template cast<typename M::Scalar>(); } :
fallback;
      |                            ^
<source>:23:28: error: expected ':' before '{' token
   23 |         return err == 0 ? M{ v.template cast<typename M::Scalar>(); } :
fallback;
      |                            ^
      |                            :
<source>:23:28: error: expected primary-expression before '{' token
<source>:23:28: error: expected ';' before '{' token
   23 |         return err == 0 ? M{ v.template cast<typename M::Scalar>(); } :
fallback;
      |                            ^
      |                            ;
<source>:23:71: error: expected primary-expression before ':' token
   23 |         return err == 0 ? M{ v.template cast<typename M::Scalar>(); } :
fallback;
      |                                                                       ^
Compiler returned: 1
---------------------------------

Reply via email to