2014-11-24 5 views
2

std::chrono должен поддерживаться в g++ 4.8.*. Однако, когда я пытаюсь скомпилировать его с помощью g++ 4.8.3, он не может найти различные объявления. Я, конечно, пользуюсь -std=c++11.g ++ 4.8. * Std :: chrono Undeclared

Например, это вызов (из сгенерированного файла, вот почему -std появляется дважды):

g++-4.8 -g -msse2 -m64 <defines> <warnings> -std=c++11 -fexceptions -std=c++11 <includes'-path> -c <source-file.cpp> -o <out-path>

Производит эту ошибку:

<source-file, line>: error: ‘std::chrono::monotonic_clock’ has not been declared

Я не смог найти verymuch что не была сразу же версией компилятора или отсутствовала -std=c++11. По логике от this мне больше не нужно ничего.

Вопрос: что случилось, как я могу это исправить?

ответ

2

В стандартном C++ нет std::chrono::monotonic_clock. Однако есть std::chrono::steady_clock.

Справедливости ради Microsoft - и буррито во всем мире - there was a monotonic_clock in the working drafts during the development of C++11 which was replaced by steady_clock.

+0

Технически его существование зависит от реализации. Код, например, компилируется в MSVC. Благодарю. – imallett

+0

@imallett Стандарт позволяет реализациям добавлять дополнительные имена в пространство имен 'std' и вложенные пространства имен, поэтому в какой-то реализации может существовать' std :: chrono :: i_like_burritos'. Но нет требования, чтобы пространство имен 'chrono' имело член с именем' i_like_burritos' (или 'monotonic_clock') в C++ 11. (Или C++ 14, что позор, потому что мне действительно нравятся burritos.) – Casey

+0

Наверняка. Я просто говорю, что 'std :: chrono :: monotonic_clock' - буррито. – imallett

1

Мне кажется, что вы могли бы использовать такой код, чтобы определить, используете ли вы старую библиотеку реализацию (что обеспечивает monotonic_clock но не steady_clock) или новый (что обеспечивает steady_clock, но, возможно, не monotonic_clock).

#if defined(__GLIBCXX__) && (__GLIBCXX__ < 20120322) 
typedef std::chrono::monotonic_clock steady_clock; 
#else 
typedef std::chrono::steady_clock steady_clock; 
#endif 

штамп даты выше соответствует libstdC++ поставляется с GCC 4.7.0, according to GNU. Я бы приветствовал любые улучшения или исправления для этого кода, например, для поддержки библиотек, отличных от libstdC++.

Смежные вопросы