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

// Test user-defined literals.
// Test simple operator declaration and definition.

#include <cstring>
#include <string>
#include <complex>
#include <cassert>

long double operator"" _v(long double);
std::string operator"" _w(const char16_t*, size_t);
unsigned operator"" _w(const char*);

std::complex<double>
operator"" _i(long double y)
{ return std::complex<double>(0.0L, y); }

void
test1()
{
  long double x = operator"" _v(1.2L);
  assert(x == 2.2L);

  std::string s = operator"" _w(u"one", 3);
  assert(s == "boo");

  unsigned u = operator"" _w("Hello, World!");
  assert(u == 13U);

  std::complex<double> i = operator"" _i(2.0);
  assert(i == std::complex<double>(0.0, 2.0));
}

int
main()
{
  test1();
}

long double
operator"" _v(long double x)
{ return x + 1.0L; }

std::string
operator"" _w(const char16_t*, size_t)
{ return std::string("boo"); }

unsigned
operator"" _w(const char* str)
{ return strlen(str); }
