Non sono un avvocato linguistico, quindi risponderò a questa domanda il più direttamente possibile.
ignore
si trova nella sinossi tuple
in tuple.general
come tale:
// [tuple.creation], tuple creation functions:
const unspecified ignore;
Come avrete notato, l'attuazione libstdc++ definisce ignore
come questo:
// A class (and instance) which can be used in 'tie' when an element
// of a tuple is not required
struct _Swallow_assign
{
template<class _Tp>
const _Swallow_assign&
operator=(const _Tp&) const
{ return *this; }
};
considerando che la versione libc++ lo definisce come this:
template <class _Up>
struct __ignore_t
{
template <class _Tp>
_LIBCPP_INLINE_VISIBILITY
const __ignore_t& operator=(_Tp&&) const {return *this;}
};
Come tale, compila in libC++. Ora la definizione di std::tie
può essere trovato in [tuple.creation] che dice:
Returns: tuple<Types&...>(t...)
. Quando un argomento in t
è ignore
, l'assegnazione di qualsiasi valore all'elemento di tupla corrispondente ha nessun effetto.
Questo non dice nulla circa ignore
sé, quindi ho intenzione di gesso questo fino a non specificato comportamento. È possibile affermare che il comportamento indefinito è non omogeneo, ma potrebbe essere un allungamento.
fonte
2016-06-20 22:40:01
Perché si vuole utilizzare 'volatile' in primo luogo? Disabilita le ottimizzazioni, non rende le cose thread-safe. Non vedo perché lo farebbe ... –
@JesperJuhl * perché è lì * – Brian
Non è un buon motivo. Il codice può essere cambiato. –