Quando o padrão C ++ fornece cabeçalhos C que trazem nomes para o espaço para nome global, isso inclui sobrecargas?

O rascunho final do comitê do próximo padrão C ++ 0x diz:

Cada cabeçalho C, cada um com o nome do formulário name.h, se comporta como se cada nome colocado no espaço de nomes da biblioteca padrão pelo cabeçalho cname correspondente fosse colocado no escopo do espaço de nomes global. Não é especificado se esses nomes são declarados ou definidos pela primeira vez no escopo do espaço para nome (3.3.6) do espaço para nome std e, em seguida, são injetados no escopo do espaço para nome global por declarações de uso explícitas (7.3.3).

Os padrões C ++ anteriores são lidos da mesma forma.

Minha pergunta é, quando o cabeçalho C ++#include<cname> usa funções sobrecarregadas, são todas as sobrecargas trazidas pelo#include<name.h>, como as sobrecargas não são "nomes" separados?

E o comportamento do código a seguir deve diferir entre compiladores C e C ++ compatíveis com padrão?

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(void)
{
    double arg = -2.5;
    double result = abs(arg) / 3;
    printf("%f\n", result);
    return 0;
}

Casos de teste prontos para compilação:

C ++math.h estdlib.h: http://ideone.com/pmD4tC math.h estdlib.h: http://ideone.com/SflpnC ++cmath ecstdlib: http://ideone.com/yI07mC ++cmath só:http://ideone.com/KrS3W

Deste teste, C ++math.h age como C e não como C ++cmath.

Mas no Visual C ++ 2010, C ++math.h age como C ++cmath.

E um canário em tempo de compilação para uso comComeau try-it-out:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

template<typename T> struct typecheck {};
template<> struct typecheck<int> { enum { value = 1 }; };

template<typename T>
typecheck<T> f(const T& t) { return typecheck<T>(); }

int main(void)
{
    double arg = -2.5;
    auto result = abs(arg) / 3;
    printf("%d\n", f(result).value);
    return 0;
}

Resultado:

Comeau C/C++ 4.3.10.1 (Oct  6 2008 11:28:09) for ONLINE_EVALUATION_BETA2
Copyright 1988-2008 Comeau Computing.  All rights reserved.
MODE:strict errors C++ C++0x_extensions

"ComeauTest.c", line 15: error: class "typecheck<double>" has no member "value"
      printf("%d\n", f(result).value);
                               ^

1 error detected in the compilation of "ComeauTest.c".

Comeau concorda com o Visual C ++.

questionAnswers(1)

yourAnswerToTheQuestion