#include <stdio.h>
#include <cstddef>
#include <cstring>
namespace /*namespace name generated by compiler*/
{
struct BB{};
}
struct AA{};
namespace my
{
inline void * memcpy(void*, const void*, std::size_t)
{
puts("CUSTOM IMPLEMENTATION");
return 0;
}
}
namespace my
{
void func()
{
AA a;
memcpy(&a, &a, sizeof(a)); // ambigious call for g++4.7 - g++6.2
BB b;
memcpy(&b, &b, sizeof(b)); // unambigious call
}
}
int main(int, char **)
{
my::func();
return 0;
}
Pourquoi memcpy est appel ici mal assurés?recherche dans C non qualifié ++
Veuillez jeter un oeil à l'exemple avec la variable "i" dans ANSI ISO CEI 14882, C++ 2003, 3.4.1, (6) (page 30). Il "prouve" qu'il n'y a pas d'ambigiotie dans une telle construction.
namespace A {
namespace N {
void f();
}
}
void A::N::f() {
i = 5;
// The following scopes are searched for a declaration of i:
// 1) outermost block scope of A::N::f, before the use of i
// 2) scope of namespace N
// 3) scope of namespace A
// 4) global scope, before the definition of A::N::f
}
Les règles de recherche non qualifiées ont-elles été rompues dans GCC ou je n'ai pas compris quelque chose?
pouvez-vous inclure l'exemple de C++ 2003, p.30. 3.4.1, (6)? – user463035818
Mieux afficher l'exemple ici même. – CinCout
Si vous voulez que nous nous référions à une section particulière de la norme linguistique, il serait beaucoup plus utile si vous * citer * la partie pertinente de la norme. –