blob: 6002e41114855155adfddeda7f63337666933a84 [file] [log] [blame]
// 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>();
}