Die Anforderungen an die C++-Konzepteinschränkungen sind nicht strengC++

Programme in C++. Entwicklerforum
Anonymous
 Die Anforderungen an die C++-Konzepteinschränkungen sind nicht streng

Post by Anonymous »

Angesichts des Konzepts

Code: Select all

template 
concept CanFoo = requires(Eigen::Array2d const& x) {
{ T::Foo(x) } -> std::same_as;
};
Als jemand, der neu in der tatsächlichen Verwendung von Konzepten ist, gehe ich davon aus, dass, wenn ich dieses Konzept verwende, um die gültigen Vorlagenparameter für eine solche Klasse einzuschränken,

Code: Select all

template 
requires CanFoo
class Host_t {
T_Bar bar_;
};
Wenn ich versuche, die Vorlage mit einer Klasse wie
zu instanziieren

Code: Select all

class RedActor {
public:
static double Foo(Eigen::Array3d const& x) { return x.mean(); }
};

// Example application
TEST(YYY, XXX) {
Host_t blah;
}
es schlägt mit einem Compilerfehler fehl, da die Signatur von RedActor::Foo ein Eigen::Array3d const& erwartet, in der Konzeptanforderungsparameterliste jedoch Eigen::Array2d const& angegeben ist.
Das ist jedoch nicht der Fall ... als jemand, der neu in Template-Konzepten ist, widerspricht dies meiner am wenigsten überraschenden Erwartung. Warum wird das kompiliert?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post