This patch implements , but with more changes than the proposal's. It 1) Creates __detail::__variant::_Traits as a centralized place to hold common (but not all yet) compile-time conditions. 2) Changes the noexcept conditions for the (copy|move) (ctor|assign) SMFs, so that when one is trivial, one is also noexcept. It's not the same as p0088r3, nor p0088r3 + D0602R1 anymore. 3) Creates 4 structs, namely (_Copy|_Move)_(ctor|assign)_(base|alias) for dispatch on triviality. The code that were originally in _Variant_base are moved into these four structs. There aren't functional changes except for more triviality. Sorry for having a large patch. Do tell me if you want me to split it. Tested on x86_64-linux-gnu. Thanks! -- Regards, Tim Shen