Hello everyone,

I encountered this issue and suggest the following ideas.

Please, read this email with a grain of salt because I am not a professional C++ programmer.

In addition, English is my second language, so I apologize for any errors.

In C++23, import std was introduced to facilitate the use of standard libraries.

However, it does not expose macros, so a user have to include the corresponding header files again, for example:

#include <cstdio> // for stderr

// alternatively
// import <cstdio>;

import std;

int main()
  std::println(stderr, "error message");

One approach to address this issue could be to offer another api, std::eprint.

std::print uses stdout by default so it would be reasonable for std::eprint to use stderr.

cf) std::println(std::cerr, "error message") is also available.

To resolve other C streams macros, I propose global variables, std::in, std::out, and std::err as substitutes for stdin, stdout, and stderr, respectively.

I am afraid that there would be any naming conflicts and potential problems, or these variables are reserved for future usage.

The following papers try to solve the similar macro issues:

1. Macros And Standard Library Modules - import should suffice

2. assert Should Be A Keyword In C++26 - Supporting standard C++23 macros in module std

3. offsetof Should Be A Keyword In C++26 - Supporting standard C++23 macros in module std

I appreciate your time and attention in reviewing this email.

Best regards,