Ошибка C1903 — невозможно восстановить предыдущие ошибки при вызове offsetof

У меня странная ошибка, когда я компилирую свой проект в MSVC.

Я использую Microsoft Visual Studio 15 2017 и компилирую в c ++ 17 (версия MSVC 15.6.85.37198)

Код компилируется на Clang и G ++, но на MSVC выдает ошибку.

Мне удалось уменьшить код, вызывающий ошибку, до следующего фрагмента:

#include <cstddef>

struct Point {
double x;
double y;
double z;
};

template<class... Ps>
void doSomething() {
offsetof(Point, x);
}

int main() {
doSomething();
}

Это дает мне следующую ошибку:

main.cpp(10): fatal error C1903: unable to recover from previous error(s); stopping compilation [build\example.vcxproj]

Сначала я был немного озадачен, так как это была единственная ошибка, и мне потребовалось довольно много времени, чтобы понять, что проблема возникла из-за offsetof.

Проблема исходит от использования offsetof макрос внутри шаблонной функции, которая принимает пакет параметров.

Я не думаю, что этот код делает что-то незаконное или использует неопределенное поведение. Итак, проблема с моей стороны или это ошибка в компиляторе?

Спасибо

2

Решение

поскольку Point это стандартный тип макета, использование offsetof(Point, x) четко определен.

Тот факт, что MSVC17 не может скомпилировать ваш минимальный пример, безусловно, является ошибкой из-за его неспособности полностью поддерживать пакеты параметров шаблона.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]