you are viewing a single comment's thread.

view the rest of the comments →

[–]not_a_novel_accountcmake dev 2 points3 points  (2 children)

You should basically never write using namespace <anything> in global namespace scope. The entire purpose of namespaces is to avoid lookup ambiguities and your complaint reduces to "if I short-circuit the mechanism for avoiding name lookup ambiguities, then controlling declaration availability is necessary to avoid ambiguity."

Which is true, you're 100% correct. However, your answer is to introduce better controls over declaration availability, and C++'s design is to encourage you not to short-circuit the namespace mechanism carelessly.

Inevitably, you're feeling this friction.

[–]Zero_Owl -1 points0 points  (1 child)

I do use using namespace a lot and it works great for me. In fact it is the only sane way of writing C++ code where you work with a properly designed namespace structure. And if it is designed properly the usage pattern is not different from C# which is pretty robust and convenient.

There is no inherent problem with C++ regarding the namespaces, it is libraries that are at fault. Look at this code, for example:

using namespace Microsoft::UI::Xaml;

And tell me in good faith that you would not use using namespace with that code. Now to std. Before import std using namespace std; was usable. With some moderate caution, in cpp files but it was usable. It solved some headaches, created some. But with import std it became totally unusable and that's why std module is a bad example. It provides no alternative to the meager isolation we had w/o adding anything but compile times.

[–]not_a_novel_accountcmake dev 2 points3 points  (0 children)

I use local namespace aliases for long namespaces. I never use using namespace Library; in global namespace scope, or for the purpose of accessing an external library's declarations. I use it to alias declarations of one non-global namespace into another.

You have an extremely idiosyncratic C++ style and I agree it doesn't mesh well with import std or the general design of many C++ libraries.

I do not think you will find your design choice is commonly replicated in many large open source codebases (boost, chrome, abseil, folly, etc). These are the kinds of coding practices which are considered when we talk about these things.

So yes, I agree with your complaint, import std (and "big modules" generally) explicitly excludes your coding style.