[vlc-devel] [vlc-commits] Remove using namespace std; from C++ code
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Mon Jun 22 17:42:59 CEST 2015
On 22/06/2015 16:46, Rémi Denis-Courmont wrote:
> Le 2015-06-22 17:44, Tristan Matthews a écrit :
>>> If we need to depend on a library that has "using namespace std;"
>>> in its public header, then what?
>>
>> Not that I disagree with earlier points, but said library would be
>> acting crazy. Putting "using namespace std" in a header is extremely
>> bad form, especially in a librarys public header.
>
> But that works the other way too: LibVLC cannot depend on the external
> plugins using or not using the std namespace. It must work in both cases.
>
The issue originally rise because we use atomic_{load|store|init} along
with std::atomic_* types, which are not specialization of std::atomic<T>.
In order to keep the same atomic code, we need the atomic types to be
part of the global namespace.
In order to be able to use atomic_load & co (at least on GCC, I haven't
checked clang), we need to specify ourselves that atomic_int is an
explicit specialization of std::atomic<T>, rather than relying on
std::atomic_int, which is a specialization std::atomic_base.
Doing so with a using namespace std; will cause 2 different types with
the same name to appear in the global namespace, thus causing the build
to fail.
I don't really have any other proposal to fix the builds, which are not
involving rolling back to C++99, requiring GCC 5.x, or using atomic
types for c++, and atomic functions for C.
That issue aside, I honestly think it's a better idea not to use "using
namespace std;"
Regards,
--
Hugo Beauzée-Luyssen
More information about the vlc-devel
mailing list