claytonjwong
claytonjwong

Reputation: 844

How do I enable C++17 in Xcode for Mac OSX?

How do I enable C++17 in Xcode (9.4.1) on OSX High Sierra (10.13.5)?

Upvotes: 26

Views: 25271

Answers (2)

schmidt9
schmidt9

Reputation: 4528

When using development CocoaPods (writing a C++ library) I had also to update podspec of this library containing c++ 17 code to make compile host application which included this pod.

So I added these flags to library's podspec

  spec.xcconfig = { 
    "CLANG_CXX_LANGUAGE_STANDARD" => "c++17",
    "CLANG_CXX_LIBRARY" => "libc++"
  }

Upvotes: 5

claytonjwong
claytonjwong

Reputation: 844

Steps to use C++17 in Xcode (9.4.1) on OSX High Sierra (10.13.5):

  1. Open existing or create a new C++ project in Xcode
  2. Click on the "show project navigator" button. It is located on the top-left section of Xcode window just below the minimize/maximize/close window buttons. It is the left-most icon and looks like a folder.
  3. Click on "Build Settings" and scroll down to find and expand the section "Apple LLVM 9.0 - Language - C++"
  4. Change the C++ Language Dialect combobox selection to "C++17 [-std=c++17]"

Xcode Build Settings

Verification steps:

Now when I output __cplusplus, I see 201703, and I am able to compile C++17 features, such as if constexpr.

template<class T>
int compute(T x) {
    if constexpr( supportsAPI(T{}) ) {
        // only gets compiled if the condition is true
        return x.Method();
    } else {
        return 0;
    }
}

int main(){
    cout << __cplusplus << endl;
    return 0;
}

Output:

201703
Program ended with exit code: 0

Upvotes: 34

Related Questions