Есть ли разница в использовании между определением типа тега как анонимной пустой структуры или пустой структурой?Пустая структура или анонимная структура как тег
using A = struct {};
struct B {};
На мой взгляд, единственное различие является «эффективным» имя типа, когда один использует своего рода отражения (т.е. __PRETTY_FUNCTION__
, <cxxabi.h>:abi::__cxa_demangle(typeid().name())
и т.д.).
ADL работа для обоих способов:
namespace ns
{
using A = struct {};
struct B {};
constexpr
bool
adl(A)
{
return true;
}
constexpr
bool
adl(B)
{
return true;
}
}
template< typename type >
constexpr
bool
adl(type)
{
return false;
}
static_assert(adl(ns::A{}));
static_assert(adl(ns::B{}));
Ну, 'использование' в значительной степени' typedef', которое возвращается к 'typedef struct' C. Я не понимаю, почему они должны отличаться. –
Вы не можете писать какие-либо специальные функции-члены для анонимной структуры. – 0x499602D2