open-source-parsers / jsoncpp

A C++ library for interacting with JSON.
Other
8.17k stars 2.65k forks source link

[0.10.6] __GNUC__ macro does not guarantee that std::scoped_ptr exists #828

Closed Phibonacci closed 5 years ago

Phibonacci commented 6 years ago

I compiled a GCC 7.3.0 on Centos 6 and compile my program using C++98 without the C++11 API thanks to the flag : -D_GLIBCXX_USE_CXX11_ABI=0.

The following code does not compile as scoped_ptr is not an std type.

#if __GNUC__ >= 6
typedef std::scoped_ptr<CharReader> const  CharReaderPtr;
#else
typedef std::auto_ptr<CharReader>          CharReaderPtr;
#endif

I don't know in which std version std::scoped_ptr exists but it does not seem to be part of the STL, if it was part of C++11 then a __cplusplus >= 201103L condition would solve the issue. GNUC only gives the GCC version and does not guarantee the presence of scoped_ptr.

To solve my issue I kept only the auto_ptr typedef.

hkhatri241 commented 6 years ago

Please see #600

cdunn2001 commented 5 years ago

Oh, I understand #600 now. Is the necessary change already on the 0.y.z branch? And you only need a new 0.y.z release?

Phibonacci commented 5 years ago

The issue comes from the 0.10.6 from the release section of GitHub.

The tip of the 0.x.y branch does not contain a scoped_ptr declaration. The preprocessing conditions have been removed and only the auto_ptr typdef remains.

I believe a new release would solve this issue.

cdunn2001 commented 5 years ago

Ok. I'll tag a new release tonight.

cdunn2001 commented 5 years ago

0.10.7