Следуя моему ответу на этот вопрос, как в С++ 11, так и в С++ 14:
[C++11, C++14: 25.5/2]:
Содержимое совпадает с заголовком библиотеки стандартного C<stdlib.h>
со следующими исключениями:
[C++11, C++14: 25.5/3]:
Сигнал функции: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 *));
оба из них имеют то же поведение, что и исходное объявление.
Однако
[C++11, C++14: 7.5/5]:
Если два объявления объявляют функции с тем же именем и списком параметров (8.3.5), которые являются членами одного и того же пространства имен или объявляют объекты с тем же именем членами одного и того же пространства имен и деклараций дать названиям разные языковые связи, программа плохо сформирована; никакая диагностика не требуется, если декларации появляются в разных единицах перевода. [..]
Является ли это дефектом?