2018
- Trade Beats
- [EMCpp]Item-40 Use std::atomic for Concurrency, volatile for Special Memory
- [EMCpp]Item-39 Consider Void Futures for One-Shot Event Communication
- [EMCpp]Item-38 Be Aware of Varying Thread Handle Destructor Behavior
- [EMCpp]Item-37 Make std::threads Unjoinable on All Paths
- [EMCpp]Item-36 Specify std::launch::async if Asynchronicity Is Essential
- [EMCpp]Item-35 Prefer Task-Based Programming to Thread-Based
- [EMCpp]Item-34 Prefer Lambdas to std::bind
- [EMCpp]Item-33 Use decltype on auto&& parameters to std::forward them
- [EMCpp]Item-32 Use Init Capture to Move Objects Into Closures
- [EMCpp]Item-31 Avoid Default Capture Modes
- [EMCpp]Item-30 Failure Cases in Perfect Forwarding
- [EMCpp]Item-29 Assume Move Operations Are Not Present Not Cheap, and Not Used
- [EMCpp]Item-28 Understand Reference Collapsing
- [EMCpp]Item-27 Alternatives to Overloading on Universal References
- [EMCpp]Item-26 Avoid Overloading on Universal References
- [EMCpp]Item-25 Use std::move on Rvalue References, std::forward on Universal References
- [EMCpp]Item-24 Distinguish Universal References From Rvalue References
- [EMCpp]Item-23 Understand std::Move and std::Forward
- [EMCpp]Item-22 When Using Pimple Idiom, Define Special Member Functions in the Implementation File