Есть ли какой-либо трюк в С++, который может гарантировать, что пользователь класса может генерировать только rvalues?
Пример:
struct PoorClass { /* ... */};
struct EnrichedClass {
explicit EnrichedClass (const PoorClass & poor)
: m_poor (poor)
{
}
/* additional functionality for poor objects */
private:
const PoorClass & m_poor;
}
const EnrichedClass asEnriched (const PoorClass & poor)
{
return EnrichedClass { poor };
}
Теперь обогащенные объекты должны быть только временными, так как они не должны пережить обернутые плохие объекты. В идеале, обогащенные объекты никогда не должны храниться в переменной, а передаваться только как значения rvalue для функций.
Есть ли способ обеспечить, чтобы, например, сделать это максимально безопасным?