क्या सी ++ कल्पना क्रम निर्दिष्ट operator new
और के निर्माता A
में new C(A())
।
जी ++ ने ऑर्डर को A()
-> new
-> होने दिया C()
, लेकिन क्लैंग ++ ने इसे रहने दिया new
-> A()
-> C()
।
क्या अंतर अनिर्दिष्ट व्यवहार के कारण है?
g ++: 7.4.0 clang ++: 10.0.0
#include <iostream>
#include <cstdlib>
struct A {
A() {
std::cout << "call A()\n";
}
};
struct C {
C(A) {
std::cout << "call S()\n";
}
void *operator new(size_t s) {
std::cout << "call new()\n";
return malloc(s);
}
};
int main() {
void *p = new C(A());
}