Могу ли я запросить компилятор о поддержке C ++ 0x «alignas»? - PullRequest
1 голос
/ 24 августа 2011

Я пишу несколько классов и структур, которые могут выиграть от 16-байтового выравнивания. Вместо использования хаков, специфичных для компилятора, я бы предпочел использовать новую функциональность C ++ 0x alignas для будущей переносимости. Однако использование его вне соответствующих #ifdef или #ifndef средств защиты, очевидно, приведет к ошибкам на компиляторах без поддержки alignas.

Я сделал быстрый поиск похожих вопросов, и у ближайшего совпадения был ответ, рекомендовавший Boost.Config. К сожалению, Boost.Config, похоже, не включает никаких функций для запроса поддержки alignas. Есть ли другие #ifdef s или #ifndef s, которые я могу использовать, чтобы выяснить, поддерживает ли это компилятор?

Спасибо!

1 Ответ

2 голосов
/ 24 августа 2011

Не существует макросов прямой поддержки функций для различных средств C ++ 0x (C ++ 11). Есть только два способа определить их присутствие.

  1. Сохраните список поддерживаемых компилятором и используйте директивы #ifdef, основанные на макросах версии, предоставляемой компилятором, таких как __GNUC__ и _MSC_VER или
  2. Используйте сценарий обнаружения функции, такой как autoconf, чтобы определить поддержку компилятора перед сборкой, и создайте файл заголовка с вашими собственными макросами, указывающими на поддержку функции или ее отсутствие.

Использование Boost.Config на самом деле является примером того и другого: Boost имеет набор сценариев определения возможностей, которые запускаются во время разработки Boost, а затем результаты жестко кодируются в заголовках Boost.Config на основе макросов версии компилятора.

...