Когда стандарт C ++ предоставляет заголовки C, переносящие имена в глобальное пространство имен, включает ли это перегрузки?

В окончательном проекте комитета предстоящего стандарта C ++ 0x говорится:

Every C заголовок, каждый из которых имеет имя формы name.h ведет себя так, как если бы каждое имя помещено в стандарт пространство имен библиотеки соответствующими Заголовок cname помещается в область глобального пространства имен. это не указано, являются ли эти имена впервые объявлен или определен в область пространства имен (3.3.6) пространство имен std, а затем вводятся в область глобального пространства имен com / KrS3W

Из этого теста C ++ math.h действует как C, а не как C ++ cmath .

Но в Visual C ++ 2010 используется C ++ math. h действует как C ++ cmath .

И канарейка времени компиляции для использования с Comeau try-it-out :

#include
#include
#include

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

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

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

Результат:

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" has no member "value"
      printf("%d\n", f(result).value);
                               ^

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

Комо соглашается с Visual C ++.

6
задан Ben Voigt 10 December 2010 в 05:40
поделиться