Код: Выделить всё
#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 (); // работает
Код: Выделить всё
No matching member function for call to 'get'
может кто-нибудь это объяснить?
Код: Выделить всё
#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
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... onstraints