Я подозреваю, что это может быть причиной. Coliru дает эту ошибку:
clang++ -std=c++1y -O2 -Wall -pedantic -pthread main.cpp && ./a.out
/usr/local/include/boost/math/constants/constants.hpp:248:52: note: expanded from macro 'BOOST_DEFINE_MATH_CONSTANT'
namespace double_constants{ static const double name = x; } \
Если он определен как const
и не constexpr
, что может быть, почему он отвергает код. Для того, чтобы убедить себя, что является источником проблемы, мы можем воспроизвести ошибку с этим TestCase:
// This code fails
#include <boost/math/constants/constants.hpp>
namespace double_constants{ static const double name = 25; }
static constexpr double SEC3 = static_cast<double>(45)/180*double_constants::name;
Так как же это исправить? Не используйте non-templated version. Boost предоставляет templated version, который мы можем использовать вместо этого.
static constexpr double SEC3 = static_cast<double>(45)/180*boost::math::constants::pi<double>();
лязг 3,5 также реализует переменные шаблонов с режимом 1y C++:
template <class T>
static constexpr T SEC3 = static_cast<T>(45)/180*boost::math::constants::pi<T>();
int main()
{
std::cout << SEC3<double>;
}
Работы по 'НКУ 4.8.2'. Какой компилятор вы используете? – pmr
О, ты прав. Это удивительно ... Я собираюсь с Clang 3.4. С gcc он работает нормально. – WestFlame
@pmr Это, по-видимому, ошибка [gcc] (http://gcc.gnu.org/PR57979). –