I also read these code.
This means the struct Moveable actually provide a moveable interface with NTL, doesn't provide the valid check method? Is right?
Thanks.
Not quite sure I understand....
There is no way how to check moveabitity by either compiler or in runtime. Therefore type has to be marked as moveable by programmer, by inheriting from Moveable.
Actually, the alternative would be to avoid Moveable completely, but that still feels a little bit risky. Besides, all non-moveable types can still be stored in Array (including objects with virtual methods etc....)