What is ~Copyable for?

it’s very difficult to create ~Copyable things that compose. a lot of times i have an idea, like “make a noncopyable structure that yields a view of itself through some accessor” and then i go out on a limb trying to implement it, only to find out it doesn’t compile.

many times, i conceive of the noncopyable abstraction as a technique to prevent bugs, but the ceremony needed to make noncopyable things actually compile actually ends up being a much larger bug surface for mistakes to creep in. for example, accidentally dropping a field when reconstructing self from its constituent components.

i often feel at a loss for where i am supposed to learn how to get the most out of this system, or what the actual gaps are in my understanding that i need to fill in, or what the right patterns i need to learn actually are. what few resources exist are usually unhelpful, with common tropes including:

you just haven’t internalized the key concepts yet
you’re just not using them correctly
you need to make a mental leap to grasp this completely new (and superior!) architectural paradigm

but in the end, your team will spend a lot of time trying to grasp superior architectural paradigms while coming away with little to show for it in terms of skills acquired.

4 Likes