Warum versucht MSVC, die falsche Vorlage zu instanziieren, und GCC warnt, wenn ein abhängiger Name eine Mehrdeutigkeit a

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Warum versucht MSVC, die falsche Vorlage zu instanziieren, und GCC warnt, wenn ein abhängiger Name eine Mehrdeutigkeit a

by Anonymous » 10 Apr 2025, 01:13

Ich versuche (aus esoterischen Gründen, dass ich hier nicht diskutieren möchte), eine Klassenvorlage zu schreiben, deren Instanziationen Mitglieder haben, die entweder Funktionen oder Variablen (abhängig von den Vorlagenparametern) sind und die mit der gleichen Syntax an einer bestimmten Seite verwendet werden können:

Code: Select all

struct Comparable
{
template
friend bool operator(T const &value, Comparable zero) { return zero < value; }
};

template
struct Conditional;

template
struct Conditional
{
Comparable test;
};

template
struct Conditional
{
template
void test(Comparable) { }
};

void bar() { }

template
void foo(T arg)
{
Conditional().test(Comparable());
Conditional().test(Comparable());
}

int main() { foo(bar); return 0; }
< /code>
Während Clang diesen Code fein kompiliert, gibt GCC ein -wings-Template-Keyword < /code> Warnung aus, und MSVC erstreckt sich unter /permission-
.
Ich finde, dass dies verblüffend: < /p>


Msvc bis unangenehme bis zu einem steigenden, br />

Top