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

Programme in C++. Entwicklerforum
Anonymous
 Warum versucht MSVC, die falsche Vorlage zu instanziieren, und GCC warnt, wenn ein abhängiger Name eine Mehrdeutigkeit a

Post by Anonymous »

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 />

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post