У меня странная ошибка, когда я компилирую свой проект в 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
макрос внутри шаблонной функции, которая принимает пакет параметров.
Я не думаю, что этот код делает что-то незаконное или использует неопределенное поведение. Итак, проблема с моей стороны или это ошибка в компиляторе?
Спасибо
поскольку Point
это стандартный тип макета, использование offsetof(Point, x)
четко определен.
Тот факт, что MSVC17 не может скомпилировать ваш минимальный пример, безусловно, является ошибкой из-за его неспособности полностью поддерживать пакеты параметров шаблона.
Других решений пока нет …