Компилятор Borland не может обработать наследование от класса с аргументом шаблона шаблона? - PullRequest
0 голосов
/ 20 апреля 2020
template <class, template<class> class R>
struct T1
{};

template<class>
struct O
{};

template <class A>
class T2:
    public T1<A,O>
{
public:
    T2() : T1<A,O>()
    {}
};

T2<int> p;

С кодом выше это выдает следующую ошибку: E2312 'T1<int,O<{param1}> >' is not an unambiguous base class of 'T2<int>'

Но если бы мне пришлось удалить первый параметр шаблона T1

template <template<class> class R>
struct T1
{};

template<class>
struct O
{};

template <class A>
class T2:
    public T1<O>
{
public:
    T2() : T1<O>()
    {}
};

T2<int> p;

или в T2 наследуется не с параметром шаблона, а жестко запрограммированным типом

template <class, template<class> class R>
struct T1
{};

template<class>
struct O
{};

template <class A>
class T2:
    public T1<int,O>
{
public:
    T2() : T1<int,O>()
    {}
};

T2<int> p;

, затем он компилируется.

У вас есть идеи, в чем может быть проблема? Эта проблема возникает только с компилятором Borland ...

Я понимаю, мне лучше спросить поставщика, но, возможно, кто-то уже имел дело с проблемой.

Версия компилятора:

>bcc32.exe --version
Embarcadero C++ 7.40 for Win32 Copyright (c) 1993-2018 Embarcadero Technologies, Inc.
Preliminary version built Aug 23 2019 08:48:10
Revision 7.40.7174.37042
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...