1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
<span class="hljs-keyword">template</span> <<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">T</span>></span> <span class="hljs-comment">// comment</span>
<span class="hljs-function"><span class="hljs-keyword">auto</span> <span class="hljs-title">foo</span><span class="hljs-params">(T x)</span> </span>{ ... };
<span class="hljs-keyword">namespace</span> impl {
<span class="hljs-keyword">template</span><<span class="hljs-keyword">typename</span> T>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">is_streamable</span><</span>T, std::<span class="hljs-keyword">void_t</span><<span class="hljs-keyword">decltype</span>(std::declval<std::wostream &>() << std::declval<T>())>> : std::true_type { };
}
<span class="hljs-comment">// Disable overload for already valid operands.</span>
<span class="hljs-keyword">template</span><<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">T</span>, <span class="hljs-keyword">class</span> =</span> std::<span class="hljs-keyword">enable_if_t</span><!impl::is_streamable_v<<span class="hljs-keyword">const</span> T &> && std::is_convertible_v<<span class="hljs-keyword">const</span> T &, std::wstring_view>>>
std::wostream &<span class="hljs-keyword">operator</span> <<(std::wostream &stream, <span class="hljs-keyword">const</span> T &thing)
{
<span class="hljs-keyword">return</span> stream << <span class="hljs-keyword">static_cast</span><std::wstring_view>(thing);
}
<span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-keyword">struct</span> <span class="hljs-title">DataHolder</span> {</span> };
<span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-keyword">class</span> <span class="hljs-title">DataThingy</span> {</span> };
<span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-keyword">class</span> <span class="hljs-title">Boolean</span> :</span> <span class="hljs-keyword">char</span> {
True, False, FileNotFound
};
<span class="hljs-class"><span class="hljs-keyword">union</span> <span class="hljs-title">Soy</span>
{</span>
};
|