У меня есть класс, содержащий:
class SomeClass {
SomeClass *previous;
static __declspec(thread) SomeClass *stackTop;
public:
SomeClass() : previous(stackTop) { stackTop = this; }
~SomeClass() { stackTop = previous; }
};
__declspec(thread) SomeClass *SomeClass::stackTop = NULL;
Это прекрасно компилируется для Win32
target, но при компиляции для Pocket PC 2003 (ARMV4)
происходит сбой с ошибкой C2485:
error C2485: '$I' : unrecognized extended attribute
в двух местах, где я установил член в SomeClass
конструкторе и деструкторе, и во всех местах, где я создаю экземпляр SomeClass
(он создается как автоматическая переменная и должен знать, где находится следующий экземпляр выше стека) .
К сожалению, ошибка не содержит значимой документации в MSDN, и документация для __declspec(thread)
не указывает на условия, при которых она не будет работать. Я проверил, что thread
не определено в препроцессоре.