blob: e82c4bafb048ff83a6b5fda288a2132ea966a608 [file] [log] [blame]
// PR c++/102137
// { dg-do compile { target c++17 } }
template<class T>
struct A {
constexpr A() { }
constexpr A(int) { }
};
explicit A(...) -> A<int>;
template<template<class> class TT>
void f() {
TT x1 = 0; // { dg-error "deduction|no match" }
TT x2 = {0}; // { dg-error "explicit deduction guide" }
TT x3(0);
TT x4{0};
TT x5;
new TT(0);
new TT{0};
new TT();
new TT{};
new TT;
}
template<class T>
void g(T t) {
A a1 = t; // { dg-error "deduction|no match" }
A a2 = {t}; // { dg-error "explicit deduction guide" }
A a3(t);
A a4{t};
A a5;
new A(t);
new A{t};
}
template void f<A>();
template void g(int);
template<template<class> class TT>
struct B {
static inline TT x1 = 0; // { dg-error "deduction|no match" }
static inline TT x2 = {0}; // { dg-error "explicit deduction guide" }
static inline TT x4{0};
static inline TT x5;
};
template<class T>
struct C {
static inline T t;
static inline A a1 = t; // { dg-error "deduction|no match" }
static inline A a2 = {t}; // { dg-error "explicit deduction guide" }
static inline A a4{t};
static inline A a5{};
};
template struct B<A>;
template struct C<int>;
template<template<class> class TT>
struct E {
static constexpr TT x1 = 0; // { dg-error "deduction|no match" }
static constexpr TT x2 = {0}; // { dg-error "explicit deduction guide" }
static constexpr TT x4{0};
static constexpr TT x5{};
};
template<class T>
struct F {
static constexpr T t{};
static constexpr A a1 = t; // { dg-error "deduction|no match" }
static constexpr A a2 = {t}; // { dg-error "explicit deduction guide" }
static constexpr A a4{t};
static constexpr A a5{};
};
template struct E<A>;
template struct F<int>;