// { dg-do compile { target c++11 } }
template<typename T>
struct stored_value
{
  explicit stored_value() : value() { }

  explicit stored_value(const T& value) : value(value) { }

  stored_value(int, const T& value) : value(value) { }

  T value;
};

template<typename... Values>
struct myclass : public stored_value<Values>...
{
  myclass() { }

  explicit myclass(const Values&... values)
    : stored_value<Values>(values)... { }

  explicit myclass(int x, const Values&... values)
    : stored_value<Values>(x, values)... { }

};

void f()
{
  int i;
  float f;
  myclass<int*, float*> ifp1;
  myclass<int*, float*> ifp2(&i, &f);
  myclass<int*, float*> ifp3(1, &i, &f);
}
