It seems that SE doesn't understand alias templates such as:
template <class _Tp>
using __optional_sfinae_ctor_base_t = __sfinae_ctor_base<
is_copy_constructible<_Tp>::value,
is_move_constructible<_Tp>::value
>;
SE considers the template argument _Tp as an undefined symbol. Without the type alias, the template arguments are tagged correctly.
This has a knock on effect where those alias templates are used, such as:
template <class _Tp>
class optional
: private __optional_move_assign_base<_Tp>
, private __optional_sfinae_ctor_base_t<_Tp>
, private __optional_sfinae_assign_base_t<_Tp>
{
where they are also tagged incorrectly.
Hope this is something that can be fixed.