Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Apr 2014 10:08:37 +0200
From:      Tijl Coosemans <tijl@FreeBSD.org>
To:        Geoff Speicher <geoff@sea-incorporated.com>
Cc:        gerald@FreeBSD.org, freebsd-ports@freebsd.org
Subject:   Re: USES=compiler:c++11-lib on FreeBSD 8.4
Message-ID:  <20140429100837.73a0f47d@kalimero.tijl.coosemans.org>
In-Reply-To: <CAFMeXObeWJUZ1fhA35GpT8U4w3QimSRO1F7AZ2VhtpQ=Jor3=w@mail.gmail.com>
References:  <CAFMeXObeWJUZ1fhA35GpT8U4w3QimSRO1F7AZ2VhtpQ=Jor3=w@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 28 Apr 2014 22:38:55 -0400 Geoff Speicher wrote:
> Not sure if ports is the right place for this post so apologies in advance
> if I'm not in the right place.
> 
> I'm porting an application that requires c++11, and I'm trying to create
> the port on a FreeBSD 8.4 box. From everything I have read, it appears that
> c++11 is only supported in 9.1+ when world has been built with the c++11
> toolchain. However, the various ports switches such as
> USES=compiler:c++11-lib don't yield any warnings on 8.4, yet don't seem to
> work either. Can anyone comment on whether or not this option is supposed
> to work on 8.4?
> 
> Taking ports out of the equation for a moment, I can't compile the
> following c++11 file:
> 
> // test.cpp
> #include <type_traits>
> #include <string>
> 
> int main() {
>   int number = 10;
>   std::string value;
>   value = std::to_string(number);
> }
> // EOF
> 
> clang++33 fails on a new c++11 include file:
> 
> $ clang++33 -std=c++11 test.cpp
> test.cpp:1:10: fatal error: 'type_traits' file not found
> #include <type_traits>
>          ^
> 1 error generated.
> 
> 
> g++47 at least finds the include file but doesn't appear to define
> std::to_string as it should:
> 
> $ g++47 -std=c++11 test.cpp
> test.cpp: In function 'int main()':
> test.cpp:7:11: error: 'to_string' is not a member of 'std'
> 
> I also tried installing devel/libc++ and that fails trying to include
> xlocale.h, which only appears to exist in 9.1 and later. Am I missing
> something here or is c++11 simply not supported on 8.4? Assuming the
> latter, is there a way to automatically make ports fail with a meaningful
> error message on <9.0 when attempting to use c++11-lang or c++11-lib?

On 8.x one of the gcc ports has to be used if you need a c++11 library,
but it appears that the declarations of to_string in bits/basic_string.h
are hidden behind #ifdef _GLIBCXX_USE_C99 and that macro isn't defined
on FreeBSD because we are missing a few obscure c99 functions.
I think it would be best to patch the gcc ports to force the definition
of that macro.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140429100837.73a0f47d>