(C++) 'MyPolicy::MyMethod' is not a direct base class of 'MyClass<MyPolicy>'
February 24, 2017 · View on GitHub
(C++) 'MyPolicy::MyMethod' is not a direct base class of 'MyClass<MyPolicy>'
Full error message
[C++ Error] UnitMain.cpp(4): E2507 'MyPolicy::MyMethod' is not a direct base class of 'MyClass<MyPolicy>'
Cause
IDE: C++ Builder 6.0
Compiler: Borland BCC32.EXE version 6.0.10.157
template <typename MyPolicy> struct MyClass : public MyPolicy { using MyPolicy::MyMethod; };
This example is simplified from the example at the WikiPedia page about policy-based design.
The same code does compile using the IDE Dev-C++ version 4.9.9.2 its default compiler.
Solution
By removing the using statement, it will work.
template <typename MyPolicy> struct MyClass : public MyPolicy { };
Policies requires a compiler with highly robust support for templates [1].
References