При просмотре черновика стандарта (N4527) я нашел следующий абзац ([alg.c.library]):
Подпись функции:
bsearch(const void *, const void *, size_t, size_t, int (*)(const void *, const void *));
заменяется двумя объявлениями:
extern "C" void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, int (*compar)(const void*, const void*)); extern "C++" void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, int (*compar)(const void*, const void*));
И тот же материал для qsort
.
Я также нашел в [dcl.link]:
Если два объявления объявляют функции с тем же именем и списком параметров (8.3.5), которые являются членами одного и того же пространства имен или объявляют объекты с тем же именем членами одного и того же пространства имен, а декларации дают имена различные языковые связи, программа плохо сформирована;
Какова цель этих двух extern
объявлений одной и той же функции? Почему этот блок не плохо сформирован?