т.к. по умолчанию оно и так публичное.
А Вы можете мне хотя бы платно помочь с тестом
undefined reference to `main'
означает что в твоем коде нет главной функции - main
.#include <map>
constexpr unsigned int str2int( const char* str, const int h = 0 )
{
return ( !str[ h ] )? 5381 : ( ( str2int( str, h + 1 ) * 33 ) ^ str[ h ] );
}
const std::map<unsigned int, const char*> values{
{ str2int( "foo" ), "bar" },
{ str2int( "hello" ), "world" },
};
int main() { return 0; }
"foo"
и "hello"
потенциально идут в бинарник потому что они ODR-used.main
, а не во время компиляции.#include <map>
#include <type_traits>
constexpr unsigned int str2int( const char* str, const int h = 0 )
{
return ( !str[ h ] )? 5381 : ( ( str2int( str, h + 1 ) * 33 ) ^ str[ h ] );
}
const std::map<unsigned int, const char*> values{
{ std::integral_constant<unsigned int, str2int( "foo" )>::value, "bar" },
{ std::integral_constant<unsigned int, str2int( "hello" )>::value, "world" },
};
int main() { return 0; }
#include <map>
constexpr unsigned int str2int( const char* str, const int h = 0 )
{
return ( !str[ h ] )? 5381 : ( ( str2int( str, h + 1 ) * 33 ) ^ str[ h ] );
}
template< unsigned int VALUE >
static constexpr unsigned int FORCED_CONSTEXPR = VALUE;
const std::map<unsigned int, const char*> values{
{ FORCED_CONSTEXPR<str2int( "foo" )>, "bar" },
{ FORCED_CONSTEXPR<str2int( "hello" )>, "world" },
};
int main() { return 0; }
#include <map>
constexpr unsigned int str2int( const char* str, const int h = 0 )
{
return ( !str[ h ] )? 5381 : ( ( str2int( str, h + 1 ) * 33 ) ^ str[ h ] );
}
template< unsigned int VALUE >
inline constexpr unsigned int FORCED_CONSTEXPR = VALUE;
const std::map<unsigned int, const char*> values{
{ FORCED_CONSTEXPR<str2int( "foo" )>, "bar" },
{ FORCED_CONSTEXPR<str2int( "hello" )>, "world" },
};
int main() { return 0; }
kdata
какtemplate<wchar_t* x>
using kdata = std::integral_constant<wchar_t*, x>;
static std::map<std::wstring, wchar_t*> mp{
{ L"test", kdata<encoder<4>(L"Tes").data>::value }
};
encoder
тоже стоит исправить наtemplate< size_t STRING_LENGTH >
constexpr dataString<STRING_LENGTH> encoder( const wchar_t (&str)[ STRING_LENGTH ] )
static std::map<std::wstring, wchar_t*> mp{
{ L"test", kdata<encoder(L"Tes").data>::value }
};
int *p = -m1;
нуждается в реализации перегрузки унарного оператора T operator-(const T &a);
, где T
эквивалентно DinMass
.T operator-(const T &a, const T2 &b);
.