C'è qualche differenza in un uso tra la definizione del tipo di tag come una struttura vuota anonima o una struttura vuota?Struttura vuota o struttura anonima come tag
using A = struct {};
struct B {};
Alla mia mente l'unica differenza è la "efficace" nome del tipo, quando si utilizzano una sorta di riflessione (cioè __PRETTY_FUNCTION__
, <cxxabi.h>:abi::__cxa_demangle(typeid().name())
ecc).
lavoro ADL per entrambi i modi:
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{}));
Bene, 'using' è praticamente' typedef', che risale alla 'typedef struct' di C.' Non vedo perché questi dovrebbero differire in alcun modo. –
Non è possibile scrivere funzioni membro speciali per una struttura anonima. – 0x499602D2