// { dg-do compile { target c++11 } }

// From N2235

// Mess with the builtin by redeclaring.
constexpr int abs(int x) { return x < 0 ? -x : x; }

extern "C"
{
  constexpr float
  squaref(float x) { return x * x; }
}

// implicitly inline, already: warn?
inline constexpr double
squared(double x) { return x * x; }

constexpr int squarei(int x) { return x * x; }
extern const int side; // { dg-message "not initialized with a constant expression" }
constexpr int area = squarei(side); // { dg-error "side|argument" }
// error: squarei(side) is not a constant expression

int next(constexpr int x) // { dg-error "parameter" }
{ return x + 1; }

constexpr void f(int x)       // { dg-error "return type .void" "" { target c++11_only } }
{ /* ... */ }

constexpr int prev(int x)
{ return --x; }               // { dg-error "--" "" { target c++11_only } }

constexpr int g(int x, int n) // error: body not just ‘‘return expr’’
{
   int r = 1;
   while (--n > 0) r *= x;
   return r;
} // { dg-error "not a return-statement" "" { target c++11_only } }

constexpr int
bar(int x, int y) { return x + y + x * y; } // { dg-message "previously" }

int bar(int x, int y)	     // { dg-error "redefinition" }
{ return x * 2 + 3 * y; }

constexpr int twice(int x);  // { dg-message "never defined" }
enum { bufsz = twice(256) }; // { dg-error "" } twice() isn’t (yet) defined

constexpr int fac(int x)
{ return x > 2 ? x * fac(x - 1) : 1; } // OK
