This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Option 1: partition C99. Add nested C99 namespace, as follows:
namespace std { namespace __c1999; // namespace aliased to std:: when using C99 ... }
This would move C99 bits out of __gnu_cxx and give the ability to inject in one place. Also, it would visibly define C99 support, probably making things clearer.
Should __c1999 be aliased to std:: in C++0x mode? C++0x has adopted most (all?) of the C99 library changes...
1) multiple inclusion <type_traits>, <tr1/type_traits>.
If you include both, do both work?
They should.
If not, is the diagnostic an error or a warning? If you include both, do you get C++0x and TR1 behavior? Or C++0x and TR1+modifications behavior?
C++0x behavior from components in namespace std, TR1 behavior from
components in namespace std::tr1.
2) usage of C++0x includes in C++98: warn or error. (Current include/std/c++0x_warning.h behavior errors.)
Error. In an ideal world, they wouldn't even show up, e.g., including <tuple> in a C++98 program would just come back with the equivalent of "file not found." But, an #error will do.
I've attached 4 or 5 problem areas to think about to this email. You'll find them as "mixed_mode_*.cc".
I think all of these examples should compile without errors.
Binaries:
1) Iff C++0x != C++98, would like to mine libstdcxx_so_7-branch for as much as possible and use it. This is why we had this branch... In particular, versa string as the default, and the template cleanups that Chris Jefferson did.
2) Iff C++0x != C++98, I will push to use the namespace association versioning code path for the versioning strategy instead of the current gnu.ver. (This is a sub-note from 1). I'm going to be upfront about this. By doing this, there exists a way to disambiguate weak symbols between C++0x and C++98. Meaning a possibility for mixed mode working, dll/plugins working, etc. Prior art exists from FC5 libstdc++so07 package. I think it would make sense to continue so.6 as the C++98 compatible thing, and C++0x would be so.7.
Interesting. Well, I think it's guaranteed that C++0x will break the library's ABI, so we might as well take that opportunity to make all of the other ABI-breaking changes that we need to make to move libstdc++ forward.
3) Iff C++0x != C++98, g++ -fabi should be bumped as well. ie, -fabi-version=3 should be the default for C++0x. If possible, it would be great to keep g++ able to do both ABI's and C++98/C++0x. If not, same rules as for library... clean break.
I'm fairly certain that the C++0x ABI will be a superset of the C++98 ABI. New C++0x features will require extensions to the ABI, but they should be pure extensions, e.g., new name mangling rules for concepts, rvalue references, and variadic templates, but no changes to existing name mangling rules. Among other things, this means that a C++0x compiler should be able to use a C++98 library and interoperate with a C ++98 compiler using that same C++98 library.
best, -benjamin
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |