Skip to content

STL: Non-standard non-reserved identifiers available via standard headers #2206

@frederick-vs-ja

Description

@frederick-vs-ja

Describe the bug
The C++ standard allows user-defined macros to have non-reserved names. However, MSVC STL introduces some non-standard non-reserved via standard headers, which makes user-defined macros with such names able to paralyze the MSVC STL implementation.

The list of names may be incomplete:

Maybe all of them should either be removed or have their names changed to reserved identifiers in vNext.

Command-line test case

C:\Temp>type repro.cpp
#define raw_name                      delete // <vcruntime_typeinfo.h>, via <typeinfo>

#define xtime_get                     delete // <xtimec.h>, via <chrono>, <xthreads.h>, <thread>, <mutex>, <condition_variable>
#define xtime                         delete // same as above
#define sec                           delete // same as above
#define nsec                          delete // same as above

#define stdext                        delete // <xhash>, <yvals_core.h>, via <iterator>

#define hash_compare                  delete // <xhash>, via <unordered_map>, <unordered_set>

#define checked_array_iterator        delete // <iterator>
#define unchecked_array_iterator      delete // <iterator>
#define make_checked_array_iterator   delete // <iterator>
#define make_unchecked_array_iterator delete // <iterator>

#define linear_congruential           delete // <random>
#define subtract_with_carry           delete // same as above
#define mersenne_twister              delete // same as above
#define discard_block                 delete // same as above
#define uniform_int                   delete // same as above
#define uniform_real                  delete // same as above

#include <typeinfo>
#include <chrono>
#include <unordered_map>
#include <random>
#include <iterator>

int main()
{
}

C:\Temp>cl /EHsc /W4 /WX /std:c++17 .\repro.cpp
用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.29.30133 版
版权所有(C) Microsoft Corporation。保留所有权利。

repro.cpp
(omitted for short)
C1003: 错误计数超过 100;正在停止编译

Expected behavior
This program should compile.

STL version
Microsoft Visual Studio Community 2019
版本 16.11.2

Additional context
The MS CRT also provides some non-standard non-reserved names (e.g. fread_s). I don't know whether such issue has been reported or how to report it.

Fixed

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions