https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81860
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|wrong-code |link-failure
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Testcase from PR 82297, which produces an undefined reference for a function
used in a default argument of an inherited constructor:
template<class T>
struct bug_t {};
template<class T>
bug_t<T> make_bug(const T&) { return {}; }
template<class T>
struct Test {
template<class U>
Test(const U& , const bug_t<U> = make_bug(0)) {}
/**
* Also generates an error, at compile time, related bug ?
*/
// template<class U>
// Test(const U& , const bug_t<U> = make_bug<U>(0)) {}
};
template<class T>
struct img_t : Test<T> {
using Test<T>::Test;
};
template<class T = char>
img_t<T> make_img(int val) {
return {val};
}
int main() {
make_img(2);
}
/tmp/ccix9VDk.o: In function `img_t<char> make_img<char>(int)':
inh.cc:(.text._Z8make_imgIcE5img_tIT_Ei[_Z8make_imgIcE5img_tIT_Ei]+0x1e):
undefined reference to `bug_t<int> make_bug<int>(int const&)'
collect2: error: ld returned 1 exit status