Can't get this to work and my brain is melting. The code looks like it should work. I want the function to only work at compile-time and not generate any runtime code or a callable function.
template< char... str >
constexpr uint32_t operator "" _crc( )
{
constexpr auto lambda = [ ]( auto l,
uint32_t crc,
auto first,
auto ... lstr )
{
if constexpr ( sizeof...( lstr ) == 0 )
return ~crc;
return l( l,
uCRCTable[ ( crc ^ first ) & 0xFF ] ^ crc >> 8,
lstr... );
};
return lambda( lambda,
uCRCTable[ 0 ],
str... );
}
static_assert( 0xC213271D == "stack overflow"_crc );