Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MacPorts Clang 3.1 missing Standard Library install?

I am trying out initializing lists feature in C++11 using clang installed by MacPorts. When compiling this simple code:

#include <vector>

int main()
{
    std::vector<int> a {1, 3, 5};
    return 0;
}

I got this error:

stephen-chus-mac-pro:~ stephenchu$ clang -std=c++0x -c text.cxx -I/opt/local/include -v
clang version 3.1 (trunk 154872)
Target: x86_64-apple-darwin10.8.0
Thread model: posix
 "/opt/local/libexec/llvm-3.1/bin/clang" -cc1 -triple x86_64-apple-macosx10.6.0 -emit-obj -mrelax-all -disable-free -main-file-name text.cxx -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 127.2 -v -coverage-file text.o -resource-dir /opt/local/libexec/llvm-3.1/bin/../lib/clang/3.1 -I /opt/local/include -fmodule-cache-path /var/folders/UL/ULMxdJJtEQuI+WuToNAFpk+++TI/-Tmp-/clang-module-cache -std=c++0x -fdeprecated-macro -fdebug-compilation-dir /Users/stephenchu -ferror-limit 19 -fmessage-length 80 -stack-protector 1 -mstackrealign -fblocks -fobjc-dispatch-method=mixed -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o text.o -x c++ text.cxx
clang -cc1 version 3.1 based upon LLVM 3.1svn default target x86_64-apple-darwin10.8.0
#include "..." search starts here:
#include <...> search starts here:
 /opt/local/include
 /usr/include/c++/4.2.1
 /usr/include/c++/4.2.1/i686-apple-darwin10/x86_64
 /usr/include/c++/4.2.1/backward
 /usr/include/c++/4.0.0
 /usr/include/c++/4.0.0/i686-apple-darwin8
 /usr/include/c++/4.0.0/backward
 /usr/local/include
 /opt/local/libexec/llvm-3.1/bin/../lib/clang/3.1/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.
text.cxx:5:19: error: no matching constructor for initialization of
      'std::vector<int>'
        std::vector<int> a {1, 3, 5};
                         ^ ~~~~~~~~~
/usr/include/c++/4.2.1/bits/stl_vector.h:255:9: note: candidate constructor
      [with _InputIterator = int] not viable: no known conversion from 'int' to
      'const allocator_type' (aka 'const std::allocator<int>') for 3rd argument;
        vector(_InputIterator __first, _InputIterator __last,
        ^
/usr/include/c++/4.2.1/bits/stl_vector.h:213:7: note: candidate constructor not
      viable: no known conversion from 'int' to 'const allocator_type' (aka
      'const std::allocator<int>') for 3rd argument;
      vector(size_type __n, const value_type& __value = value_type(),
      ^
/usr/include/c++/4.2.1/bits/stl_vector.h:201:7: note: candidate constructor not
      viable: requires at most 1 argument, but 3 were provided
      vector(const allocator_type& __a = allocator_type())
      ^
/usr/include/c++/4.2.1/bits/stl_vector.h:231:7: note: candidate constructor not
      viable: requires 1 argument, but 3 were provided
      vector(const vector& __x)
      ^
1 error generated.

It seems to include the headers from system gcc (4.2). And I can't find any clang specific headers. What package should I install from MacPorts for this to work? Or do I need to install and build clang's libc++?

like image 535
Stephen Chu Avatar asked Oct 24 '22 00:10

Stephen Chu


1 Answers

First you'll need to set the standard library with '-stdlib=libc++'

Then you may need updated headers. The newest libc++ headers will work with libc++ libs installed with OS X 10.7 and up.

I don't know that macports has libc++, but since all you need is the headers you should be able to simply download them and drop them into the include directory adjacent to wherever clang is installed.

like image 160
bames53 Avatar answered Oct 31 '22 10:10

bames53