РЕДАКТИРОВАТЬ: это была проблема компилятора, и теперь она решена Microsoft. Обратитесь к https://developercommunity.visualstudio ... r/10677725.
Мне хотелось бы помочь понять, почему следующий код не работает. компилируется в MSVC (/std:c++20), но компилируется в GCC и Clang. Кажется, это связано с конструктором constexpr.
#include
#include
class TestX
{
bool GetA(char * outVal, unsigned int outValLen) {(void)outVal, (void)outValLen; return false;}
struct SupportedParam
{
using GetParamFunc = bool (TestX::*)(char * outVal, unsigned int outValLen);
constexpr SupportedParam(GetParamFunc gp) : GetParam(gp) {}
GetParamFunc GetParam;
};
static const auto & SupportedParameters()
{
static constexpr std::array t =
{
SupportedParam(&TestX::GetA)
};
static_assert(t[0].GetParam == &TestX::GetA);
return t;
};
public:
void Print()
{
for(auto & x : SupportedParameters())
{
std::cout *x.GetParam)(nullptr, 0);
}
}
};
int main(void)
{
TestX x;
x.Print();
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... onstructor
Разница между MSVC и GCC/Clang для конструктора constexpr ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение