I am having trouble getting even a simple hello world to compile with clang if I enable c++11 and libc++. For example the following code
#include <iostream>
int main()
{
std::cout << "Hello, World!" << std::endl;
return 0;
}
Produces the following output from the compile when I run clang++ -std=c++11 -stdlib=libc++ main.cpp
In file included from main.cpp:1:
In file included from /usr/bin/../lib/c++/v1/iostream:38:
In file included from /usr/bin/../lib/c++/v1/ios:216:
In file included from /usr/bin/../lib/c++/v1/__locale:15:
In file included from /usr/bin/../lib/c++/v1/string:434:
In file included from /usr/bin/../lib/c++/v1/algorithm:591:
/usr/bin/../lib/c++/v1/type_traits:165:12: error: unknown type name
'_LIBCPP_CONSTEXPR'
static _LIBCPP_CONSTEXPR const _Tp value = __v;
^
/usr/bin/../lib/c++/v1/type_traits:165:30: error: expected member name or ';'
after declaration specifiers
static _LIBCPP_CONSTEXPR const _Tp value = __v;
~~~~~~~~~~~~~~~~~~~~~~~~ ^
/usr/bin/../lib/c++/v1/type_traits:169:9: error: unknown type name
'_LIBCPP_CONSTEXPR'
_LIBCPP_CONSTEXPR operator value_type() const {return value;}
^
/usr/bin/../lib/c++/v1/type_traits:169:63: error: use of undeclared identifier
'value'
_LIBCPP_CONSTEXPR operator value_type() const {return value;}
^
/usr/bin/../lib/c++/v1/type_traits:173:1: error: unknown type name
'_LIBCPP_CONSTEXPR'
_LIBCPP_CONSTEXPR const _Tp integral_constant<_Tp, __v>::value;
^
/usr/bin/../lib/c++/v1/type_traits:173:19: error: expected unqualified-id
_LIBCPP_CONSTEXPR const _Tp integral_constant<_Tp, __v>::value;
^
/usr/bin/../lib/c++/v1/type_traits:730:2: error: is_base_of not implemented.
#error is_base_of not implemented.
^
/usr/bin/../lib/c++/v1/type_traits:400:56: error: no member named 'value' in
'std::__1::is_integral<void>'
: public integral_constant<bool, is_integral<_Tp>::value ||
~~~~~~~~~~~~~~~~~~^
/usr/bin/../lib/c++/v1/type_traits:941:19: note: in instantiation of template
class 'std::__1::is_arithmetic<void>' requested here
(is_arithmetic<_A2>::value || is_void<_A2>::value) &&
^
/usr/bin/../lib/c++/v1/type_traits:949:22: note: in instantiation of default
argument for '__promote<type-parameter-0-0, void, void>' required here
typedef typename __promote<_A1>::type __type1;
^~~~~~~~~~~~~~
/usr/bin/../lib/c++/v1/type_traits:949:38: error: expected a qualified name
after 'typename'
typedef typename __promote<_A1>::type __type1;
^
/usr/bin/../lib/c++/v1/type_traits:949:42: error: expected ';' at end of
declaration list
typedef typename __promote<_A1>::type __type1;
^
/usr/bin/../lib/c++/v1/type_traits:941:39: error: no member named 'value' in
'std::__1::is_arithmetic<void>'
(is_arithmetic<_A2>::value || is_void<_A2>::value) &&
~~~~~~~~~~~~~~~~~~~~^
/usr/bin/../lib/c++/v1/type_traits:950:22: note: in instantiation of default
argument for '__promote<type-parameter-0-1, void, void>' required here
typedef typename __promote<_A2>::type __type2;
^~~~~~~~~~~~~~
/usr/bin/../lib/c++/v1/type_traits:950:38: error: expected a qualified name
after 'typename'
typedef typename __promote<_A2>::type __type2;
^
/usr/bin/../lib/c++/v1/type_traits:950:42: error: expected ';' at end of
declaration list
typedef typename __promote<_A2>::type __type2;
^
/usr/bin/../lib/c++/v1/type_traits:941:39: error: no member named 'value' in
'std::__1::is_arithmetic<void>'
(is_arithmetic<_A2>::value || is_void<_A2>::value) &&
~~~~~~~~~~~~~~~~~~~~^
/usr/bin/../lib/c++/v1/type_traits:951:38: error: expected a qualified name
after 'typename'
typedef typename __promote<_A3>::type __type3;
^
/usr/bin/../lib/c++/v1/type_traits:951:42: error: expected ';' at end of
declaration list
typedef typename __promote<_A3>::type __type3;
^
/usr/bin/../lib/c++/v1/type_traits:953:22: error: use of undeclared identifier
'__type1'
typedef decltype(__type1() + __type2() + __type3()) type;
^
/usr/bin/../lib/c++/v1/type_traits:953:34: error: use of undeclared identifier
'__type2'
typedef decltype(__type1() + __type2() + __type3()) type;
^
/usr/bin/../lib/c++/v1/type_traits:953:46: error: use of undeclared identifier
'__type3'
typedef decltype(__type1() + __type2() + __type3()) type;
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
The code will compile fine if I use xcode and set the options for libc++ and c++11 support.
Thank you for any replies
Go to property of the project --> c/c++ build --> settings --> cross gcc compiler and cross g++ compiler. Put -std=c++11 under miscellaneous part of both tabs. Click Apply.
You can use Clang in C++17 mode with the -std=c++17 option (use -std=c++1z in Clang 4 and earlier).
Its contributors include Apple, Microsoft, Google, ARM, Sony, Intel, and AMD. Clang 14, the latest major version of Clang as of March 2022, has full support for all published C++ standards up to C++17, implements most features of C++20, and has initial support for the upcoming C++23 standard. Since v6.
Your command-line tools are out of date. Clang 4.0 shipped with Xcode 4.4. You want Clang 4.1, which ships with Xcode 4.5. After installing Xcode, you can go to the Preferences window, select the Downloads pane, and the Components tab, and there's an entry for "Command Line Tools". There will be a button on the right side that says "Install".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With