// RUN: %clang_cc1 -fsyntax-only -verify %s
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s

namespace Ints {
  int zero = 0; // expected-note {{candidate found by name lookup is 'Ints::zero'}}
  void f(int); // expected-note 3 {{candidate function}}
  void g(int);
}

namespace Floats {
  float zero = 0.0f; // expected-note {{candidate found by name lookup is 'Floats::zero'}}
  void f(float); // expected-note 3 {{candidate function}}
  void g(float);
}

namespace Numbers {
  using namespace Ints;
  using namespace Floats;
}

void test() {
  int i = Ints::zero;
  Ints::f(i);
  
  float f = Floats::zero;
  Floats::f(f);
  
  double n = Numbers::zero; // expected-error {{reference to 'zero' is ambiguous}}
  Numbers::f(n); // expected-error{{call to 'f' is ambiguous}}
  Numbers::f(i);
  Numbers::f(f);
}

namespace Numbers {
  struct Number { // expected-note 2 {{candidate constructor (the implicit copy constructor) not viable}}
#if __cplusplus >= 201103L // C++11 or later
  // expected-note@-2 2 {{candidate constructor (the implicit move constructor) not viable}}
#endif

    explicit Number(double d) : d(d) {}
    double d;
  };
  Number zero(0.0f);
  void g(Number); // expected-note 2{{passing argument to parameter here}}
}

void test2() {
  Numbers::Number n = Numbers::zero;
  Numbers::f(n); // expected-error {{no matching function for call to 'f'}}
  Numbers::g(n);
}

namespace Numbers2 {
  using Numbers::f;
  using Numbers::g;
}

void test3() {
  Numbers::Number n = Numbers::zero;
  Numbers2::f(n); // expected-error {{no matching function for call to 'f'}}
  Numbers2::g(n);

  int i = Ints::zero;
  Numbers2::f(i);
  Numbers2::g(i); // expected-error {{no viable conversion from 'int' to 'Numbers::Number'}}

  float f = Floats::zero;
  Numbers2::f(f);
  Numbers2::g(f); // expected-error {{no viable conversion from 'float' to 'Numbers::Number'}}
}

namespace inline_ns {
  int x; // expected-note 2{{found}}
  inline namespace A {
#if __cplusplus <= 199711L // C++03 or earlier
  // expected-warning@-2 {{inline namespaces are a C++11 feature}}
#endif

    int x; // expected-note 2{{found}}
    int y; // expected-note 2{{found}}
  }
  int y; // expected-note 2{{found}}
  int k1 = x + y; // expected-error 2{{ambiguous}}
  int k2 = inline_ns::x + inline_ns::y; // expected-error 2{{ambiguous}}
}
