ABu
ABu

Reputation: 12289

Pre-C++14 template metaprogramming and conditional operator

From cppreference.com:

Such conditional operator was commonly used in C++11 constexpr programming prior to C++14.

std::string str = 2+2==4 ? "ok" : throw std::logic_error("2+2 != 4");

What does cppreference refer to? What was the pre-C++14 idiom and why in C++14 that technique is no longer relevant?

Upvotes: 1

Views: 86

Answers (1)

Yakk - Adam Nevraumont
Yakk - Adam Nevraumont

Reputation: 275740

In you could not have more than one statement, basically, in a constexpr function. In you can.

constexpr bool str(int x){
  return  2+2==x ? true : throw std::logic_error("2+2 != x");
}

vs :

constexpr bool str(int x){
  if (2+2==x)
    return true;
  else
     throw std::logic_error("2+2 != x");
}

Upvotes: 3

Related Questions