view gcc/testsuite/g++.dg/cpp0x/pr87750.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line source

// PR c++/87750
// { dg-do compile { target c++11 } }

template <typename T>
class Bar
{
protected:
    template <bool B>
    int process(int) { return 0; }
};

template<typename T>
class Derived : Bar<T>
{
    using Base = Bar<T>;
    // Note applying Base::template workaround in (2) and commenting
    // this out then compiles.
    using Base::process;
public:
    void foo()
    {
        // (1) workaround: this->template
        // This line only fails on gcc 8.x, works in clang/icc/msvc.
        process<false>();
    }

    template <bool B>
    int process()
    {
        // (2) workaround: this->template or Base::template
        // Note clang 5 & 6 don't accept this line either, but clang 7 does.
        return process<B>(1);
    }
};

int main()
{
    Derived<int> x;
    return x.process<false>();
}