Основная проблема в вашем коде состоит в том, что вы не можете использовать static_cast
для преобразования между указателями на разные типы данных - когда эти типы не связаны , как char
и wchar_t
;для этого вам потребуется приведение в стиле reinterpret_cast
или C
:
constexpr EncryptedStorage(const U* input)
{
hack(reinterpret_cast<const char* const>(input), LENGTH * sizeof(U), reinterpret_cast<char* const>(m_data));
}
Однако, если у вас есть такое приведение, ваша функция EncyptedStorage
больше не может быть оценена во время компиляции,поэтому два объявления constexpr
в вашем main
потерпят неудачу, и вам придется просто использовать const
вместо этого:
const auto encrypted = EncryptedStorage<char, size>(test);
const auto wencrypted = EncryptedStorage<wchar_t, wsize>(wtest); // Can't use constexpr
РЕДАКТИРОВАТЬ: Другой способ (возможно, более приятный) - использовать function-style casts:
using pcchar = const char* const;
using pchar = char* const;
constexpr EncryptedStorage(const U* input)
{
hack(pcchar(input), LENGTH * sizeof(U), pchar(m_data));
}
При этом вы можете использовать constexpr
для encrypted
, но не для wencrypted
!