https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80016
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed|2017-03-13 00:00:00 |2018-11-14
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
No, the finish location is still wrong on trunk.
Reduced:
namespace ns {
template<typename T> struct trait;
}
struct any
{
static unsigned const size = 3 * sizeof(void*);
static unsigned const alignment = alignof(void*);
template <typename T>
static constexpr bool fits = sizeof(T) <= size
&& alignof(T) <= alignment
&& ns::trait<T>::value;
template <typename T = int, bool = fits<T>>
any();
};
any x;
The output on trunk includes:
expr-loc-bug.cpp:13:29: error: incomplete type 'ns::trait<int>' used in nested
name specifier
11 | static constexpr bool fits = sizeof(T) <= size
| ~~~~~~~~~~~~~~~~~
12 | && alignof(T) <= alignment
| ~~~~~~~~~~~~~~~~~~~~~~~~~~
13 | && ns::trait<T>::value;
| ^~~~~
I'd even argue the stating location still isn't right in this version, as the
error comes from ns::trait<T>::value not the logical expression containing it.