'Weird issues with Clang and C++, and uniform initialization

I was attempting to compile and run the example on this page that explores function pointers as a function input. The example I was running was the 66 line one about halfway down the page.

https://www.learncpp.com/cpp-tutorial/function-pointers/

I am on Mac iOS 12.3.1. I tried to compile with

g++ sort.cc

and was getting errors that no semicolons were in my for loops, i believe due to the bracket initialization throughout the code. And when I run it with:

g++ -std=c++11 sort.cc 

It works fine.

BUT

Shouldn't my clang be compiling at at least C++11? running

clang -v

I get

Apple clang version 13.1.6 (clang-1316.0.21.2)
Target: x86_64-apple-darwin21.4.0

And from what I can tell clang versions past 4 default to c++14.

Also, when I run using clang or gcc I get errors setting -std=c++xx, but it works fine with g++. But as far as I can tell, g++ and gcc are aliases to clang, and running gcc -v or g++ -v gives me clang version 13.1.6.

So whats going on?



Solution 1:[1]

Xcode clang defaults to C++98. Compiling a simple program which has C++11 or later features will tell you that C++11 or later isn't the default. e.g.,

// a.cpp 
constexpr int i = 10;
clang a.cpp -c 
a.cpp:1:1: error: unknown type name 'constexpr'
constexpr int i = 10;
^
1 error generated.

while clang a.cpp -c -std=c++11 works fine.

Also see: https://trac.macports.org/wiki/CompilerSelection

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 A. K.