title: Using C++20 in 2019
body: <p>I'm starting a new C++ project that I probably will be working on and gradually extending for quite a while (at least a year). I'm trying to keep up with C++20 and I would love to start using some of the new features. I don't really care about supporting multiple compilers (GCC or Clang is enough). So far, I've been only experimenting with some of these features, but never considered using C++20 features in a real project.</p>
  
  <p>Edit: My original question was about the current state of the C++20 standard and its support from compilers. I've been asked to narrow down the actual question, so I'll stick to my main reason to use C++20:</p>
  
  <p>The main feature I'm interested in are the concepts. I've experimented with concepts on GCC with the <code>-fconcepts</code> flag. As I understand, this should correspond to the Concepts TS. But what's the state of concepts in the current standard? I've noticed that there are some minor syntactical differences between the TS and some other sources I've found on C++20. Is it realistic to use the current GCC's implementation (or maybe other compiler, that does it better) in a way that will be (at least with a high probability) valid in the actual finalized standard? Are there any reliable sources to keep track of the current agreed upon specification of concepts and other features?</p>
  
  <p>The original questions:</p>
  
  <p><strong>What's the state of C++20 standard?</strong> When can I expect it to be complete, or at least in such a state that I can use it safely without worrying about my code not being valid in the final standard? I use <a href="https://en.cppreference.com/w/cpp" rel="noreferrer">cppreference</a> as my primary source of information on language details. When it says <code>since C++20</code>, does that mean, that it is a finalized version that will stay in the standard?</p>
  
  <p><strong>What's the state of C++20 support?</strong> When can I expect it to be fully implemented (or at least the most important parts) in GCC, Clang, or maybe MSVC? In particular, what's the state of concepts and modules? I know that GCC has experimental support for concepts with <code>-fconcepts</code> (though <a href="https://en.cppreference.com/w/cpp/compiler_support" rel="noreferrer">cppreference</a> says, that it supports "TS only") and there's a branch of GCC that supports modules with <code>-fmodules</code> (but doesn't work with concepts).</p>