Matthias Gubisch hat geschrieben: ↑14.11.2023, 22:40
Frage 1: Wer hat recht? ich vermute leider gcc und clang
Keiner hat unrecht, denn es handelt sich hier offenbar um einen Bug im Standard:
https://www.open-std.org/jtc1/sc22/wg21 ... .html#2746. Ich glaube es ist unterspezifiziert ob die implizite Instanziierung eines Klassentemplates auch die implizite Instanziierung der Defaultargumente von Membertemplates mit sich zieht. Ich würde aber mal vermuten, dass das ultimativ ein Bug in clang/gcc werden wird. Defaultargumente werden meinem Verständnis nach normalerweise nicht mitinstantziiert, auch wenn das aktuelle Wording dies nicht explizit ausdrückt (es gibt explizite Ausnahmen für Defaultargumente von Funktionsparametern, für Defaultargumente von Templateparametern scheint das aber zu fehlen).
Matthias Gubisch hat geschrieben: ↑14.11.2023, 22:40
Frage 2: jemand eine idee wie ich das zum compilieren bekomme?
Easy, nachdem du offenbar eh C++20 verwendest, vergisst du am besten dass es
std::enable_if jemals gegeben hat und verwendest constraints:
Code: Alles auswählen
template<bool deferred = true>
class foo
{
void bar() const requires deferred
{
}
};