GLM: не могу больше компилировать

Кто-нибудь использует эта библиотека больше?

Отлично работал для меня в прошлом году, но теперь мой код не компилируется:

(на MinGW с GCC 4.6.1):

In file included from ../include/glm/./core/func_packing.hpp:190:0,
from ../include/glm/glm.hpp:103,
from SmoothRenderer.cpp:11:
../include/glm/./core/func_packing.inl: In function 'glm::detail::uint32 glm::packUnorm4x8(const glm::detail::tvec4<float>&)':
../include/glm/./core/func_packing.inl:84:17: error: expected primary-expression before '(' token
../include/glm/./core/func_packing.inl:84:17: error: expected primary-expression before ')' token
../include/glm/./core/func_packing.inl:84:17: error: expected ';' before 'round'
../include/glm/./core/func_packing.inl:85:26: error: 'D' was not declared in this scope
../include/glm/./core/func_packing.inl: In function 'glm::detail::tvec4<float> glm::unpackUnorm4x8(const uint32&)':
../include/glm/./core/func_packing.inl:94:38: warning: statement has no effect [-Wunused-value]
../include/glm/./core/func_packing.inl:99:4: error: 'D' was not declared in this scope

Это с последней версией 0.9.4.3.

Похожие проблемы на моем Mac с последним лязгом:

In file included from SmoothRenderer.cpp:10:
In file included from ../include/glm/glm.hpp:103:
In file included from ../include/glm/./core/func_packing.hpp:190:
../include/glm/core/func_packing.inl:84:33: error: expected '(' for function-style cast or type construction
detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f));
~~~~~~~~~~~~~^
./util.h:330:15: note: expanded from macro 'D'
# define D(x) x
^
In file included from SmoothRenderer.cpp:10:
In file included from ../include/glm/glm.hpp:103:
In file included from ../include/glm/./core/func_packing.hpp:190:
../include/glm/core/func_packing.inl:85:26: error: use of undeclared identifier 'D'
return detail::uint32((D << 24) | (C << 16) | (B << 8) | A);
^
../include/glm/core/func_packing.inl:99:4: error: use of undeclared identifier 'D'
D * 1.0f / 255.0f);
^
../include/glm/core/func_packing.inl:94:30: warning: expression result unused [-Wunused-value]
detail::uint32 D((p >> 24) & Mask8);
~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~
./util.h:330:15: note: expanded from macro 'D'
# define D(x) x
^
In file included from SmoothRenderer.cpp:10:
In file included from ../include/glm/glm.hpp:108:
In file included from ../include/glm/./core/func_noise.hpp:85:
../include/glm/core/func_noise.inl:125:33: error: too many arguments provided to function-like macro invocation
detail::tvec4<T> const D(0.0, 0.5, 1.0, 2.0);
^
../include/glm/core/func_noise.inl:125:27: error: expected ';' at end of declaration
detail::tvec4<T> const D(0.0, 0.5, 1.0, 2.0);
^
;

Это библиотека только для заголовков. Такие вещи не должны происходить …

Я использую это только для умножения и инверсии матрицы 4х4. Поскольку остальная часть моего приложения широко использует LAPACK, мне не нужно ничего, что делает GLM. Но я ненавижу, когда мой код, который я пытаюсь сделать очень переносимым, случайно ломается, как это.

0

Решение

Да, это оказалось проблемой с D макро. Черт возьми, отвечая на мой вопрос через 4 минуты после того, как спросил. В этом прелесть объяснения проблемы. В половине случаев этого достаточно.

Это еще одна причина избегать использования препроцессора. Безумные ошибки. Хотя, к его чести, clang был достаточно хорош, чтобы не только упомянуть, что что-то казалось ненадежным с макросом, определенным в другом месте, он даже скопировал его туда, чтобы показать мне.

2

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

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

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