title: C++ Type erasure with traits
body: <p>I wanted to know that this is possible to make an erased type that conforms to a trait like this one : </p>
  
  <pre><code>template&lt;class T&gt;
  using read_t = std::conditional_t&lt;true,
      decltype(std::declval&lt;T&gt;().Read(uint16_t{})),
      std::integral_constant&lt;uint8_t (T::*)(uint16_t), &amp;T::Read&gt;&gt;;
  </code></pre>
  
  <p>and use it like this ?</p>
  
  <pre><code>using any_readable_t = any&lt;read_t&gt;; 
  auto test(any_readable_t &amp;r) -&gt; uint8_t {
       return r.Read(0);
  }
  </code></pre>