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 />
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 [b] gleichen [/b] Syntax an einer bestimmten Seite verwendet werden können:
[code]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-[/code].
Ich finde, dass dies verblüffend: < /p>
Msvc bis unangenehme bis zu einem steigenden, br />