Ошибка C1903 - невозможно восстановить предыдущие ошибки при вызове offsetof - PullRequest
0 голосов
/ 11 мая 2018

У меня странная ошибка при компиляции моего проекта в 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 внутри шаблонной функции, которая принимает пакет параметров.

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

Спасибо

1 Ответ

0 голосов
/ 11 мая 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...