Это немного сложно увидеть, не видя фактических «ошибок» (если компиляция прошла успешно, это не ошибки компилятора, но см. ниже), но макрос определяется следующим образом:
#define POCO_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(x) \
template <> struct AlignedCharArrayImpl<x> \
{ \
char aligned alignas(x); \
}
#define POCO_HAVE_ALIGNMENT
#endif
Другими словами, он пытается создать некоторые определения структуры выравнивания шаблона, такие как AlignedCharArrayImpl<16>
и AlignedCharArrayImpl<8192>
. Ошибка вероятно связана с передачей неверного выравнивания alignas
на основе вашего заголовка Invalid alignment specifier value
.
Однако в этом случае ваш код на самом деле не должен компилироваться, поскольку C++11 7.6.2 явно указывает, что неподдерживаемые выравнивания делают программу неправильной. Если не видеть реальных сообщений об ошибках, я не могу помочь с этим конкретным аспектом.
У меня также мало опыта работы с продуктом Microsoft C++ (в основном я использую C#), но эта страница, по-видимому, указывает на "менее полную" поддержку alignas
:
Ни Visual C++ 2010, ни Visual C++ в Visual Studio 2012 не реализуют ключевые слова основного языка alignas/alignof из предложения по выравниванию, за которое проголосовали в рабочем документе. В Visual C++ 2010 было выровнено_хранилище из TR1. Visual C++ в Visual Studio 2012 добавляет в стандартную библиотеку linear_union и std::align().
Я не знаю, изменилось ли что-нибудь с тех пор, как это было опубликовано, но есть как минимум один отчет об ошибке об отсутствии поддержки этой функции, которая была закрыта как отложенная (имеется в виду, предположительно, еще не исправленная) . Так что это может быть это, которое вызывает ваши проблемы.
И, основываясь на вашем комментарии о том, что только Intellisense жалуется на выравнивание, я полагаю, что это было описано в это сообщение об ошибке:
Мы используем отдельные компиляторы для IntelliSense и сборки, и, к сожалению, они не согласны с верхним пределом для выравнивания.
Другими словами, если ваш компилятор компилирует его, вы можете спокойно игнорировать ошибку Intellisense. Судя по всему, определение IDE от Microsoft не такое уж «интегрированное», как мы привыкли ожидать :-)
person
paxdiablo
schedule
07.08.2013