Zugänglichkeit von Einschränkungen, die zum Einschränkung ererbter Konstruktoren verwendet werdenC++

Programme in C++. Entwicklerforum
Anonymous
 Zugänglichkeit von Einschränkungen, die zum Einschränkung ererbter Konstruktoren verwendet werden

Post by Anonymous »

Ich bin auf ein Problem gestoßen, als ich versucht habe, von einer Klasse mit Konstruktoren zu erben, die über eine erforderliche -Klausel eingeschränkt werden. Die Einschränkung wird über ein privat statisches Contexprmitglied definiert, das anhand von Parametern der Klassenvorlagen an bool Wert bewertet wird. Dies gibt an sich keine Probleme - bis ich eine andere Klasse definiert habe, die sich von einer Spezialisierung der oben genannten Klassenvorlage erbt. Wenn Konstrukteure der Vorlagenklasse über eine Verwendung Deklaration in den Geltungsbereich der abgeleiteten Klasse gebracht werden, erhalte ich einen seltsamen Fehler über den ungültigen Zugang zum privaten Mitglied. Darüber hinaus scheint dieses Problem bei der Verwendung von MSVC -Compiler vorhanden zu sein, nicht jedoch mit Clang oder GCC (kompiliert mit C ++ 20). Unten finden Sie den relevanten Codeabschnitt, der diese Fehler generiert (https://godbolt.org/z/ypeahtje1):
#include
#include

template class container {
private:
static constexpr bool custom_requirement = std::is_arithmetic_v;

public:
explicit container() = default;
explicit container(size_t s)
requires custom_requirement // m_size; }

private:
size_t m_size;
};

struct test : container {
auto extension() { return this->size() + 1; }
using container::container;
using container::operator=;
};

void func() {
auto t1 = test(); // OK : uses default test and container constructor
auto t2 = test(3); // Error : ???
}
< /code>
und der fehlerrelevante Teil des MSVC -Fehlerausgangs: < /p>
(28): error C2440: '': cannot convert from 'int' to 'test'
(28): note: 'test::test': no overloaded function could convert all the argument types
...
(28): note: Reason: cannot convert from 'int' to 'test'
(22): note: or 'test::test(size_t)', which inherits 'container::container(size_t)' via base class 'container'
(22): note: the 'test::test' constraint was not satisfied
(11): note: 'container::requirement': cannot access private member declared in class 'container'
...
< /code>
meine Frage ist also, ob MSVC Compiler -Fehler korrekt generiert. Ich würde mir vorstellen, dass dies nicht der Fall ist, aber vielleicht gibt es einige seltsame Regeln für die Zugänglichkeit für Einschränkungen, die für ererbte Konstrukteure verwendet werden. Wenn dies der Fall ist, wäre ich dankbar für einen relevanten Link/Abschnitt mit dem Sprachstandard, der diesen Fehler erklären würde.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post