Использование шаблонной функции родительского члена с ограничениямиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Использование шаблонной функции родительского члена с ограничениями

Сообщение Anonymous »

У меня есть следующий код: < /p>

Код: Выделить всё

#include 

template  class CombineI;

template  class CombineI {
public:
template 
requires(i == I)
const T &get() const {
return data;
}

private:
T data;
};

template 
class CombineI : public CombineI {
public:
using CombineI::get; // use the parent get member

template 
requires(i == I)
const T &get() const {
return data;
}

private:
T data;
};
template  class Combine : public CombineI {};

int main() {
Combine c;
c.get(); // works
c.get(); // works
c.get(); // does not compile, why? "No matching member function for call to 'get'"
}
< /code>
Я не понимаю, почему функция участника самого старого родителя в иерархии можно назвать c.get  (); // работает 
, но не члена родителя в середине иерархии c.get (); (

Код: Выделить всё

No matching member function for call to 'get'
). Я компилируюсь с -std = c ++ 20 .
может кто-нибудь это объяснить?

Код: Выделить всё

#include 

class CombineI2 {
public:
template 
requires(i == 2)
const auto &get() const {
return data;
}

private:
int data;
};

class CombineI1 : public CombineI2 {
public:
using CombineI2::get; // use the parent get member

template 
requires(i == 1)
const auto &get() const {
return data;
}

private:
int data;
};

class CombineI0 : public CombineI1 {
public:
using CombineI1::get; // use the parent get member

template 
requires(i == 0)
const auto &get() const {
return data;
}

private:
int data;
};

template  class Combine : public CombineI0 {};

int main() {
Combine c;
c.get(); // works
c.get(); // works
c.get(); // works
}
Так что это ошибка компилятора в Clang и GCC.

Подробнее здесь: https://stackoverflow.com/questions/796 ... onstraints
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»