Re: [Boost-bugs] [Boost C++ Libraries] #13191: undefined reference error when ODR-using boost::ratio::{num, den}

Subject: Re: [Boost-bugs] [Boost C++ Libraries] #13191: undefined reference error when ODR-using boost::ratio::{num, den}
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2017-11-03 05:30:49


#13191: undefined reference error when ODR-using boost::ratio::{num,den}
-------------------------------+---------------------
  Reporter: anonymous | Owner: viboes
      Type: Bugs | Status: new
 Milestone: To Be Determined | Component: ratio
   Version: Boost 1.59.0 | Severity: Problem
Resolution: | Keywords:
-------------------------------+---------------------

Comment (by yuri.goldfeld@…):

 Replying to [comment:3 anonymous]:
> Replying to [comment:2 yuri.goldfeld@…]:
> > Ah, glad I'm not the only person experiencing this. gcc and clang
 C++03 mode => code was fine for years; clang C++11 mode => undefined
 reference for ratio<>::num and ::den.
> >
> > Though, I am not totally sure what "ODR-using" is, exactly, nor how to
 work around this. I'm sure I'll find a way, but this seems like a rather
 significant link error given the simplicity and thus probable commonness
 of what is being attempted here. It doesn't seem like the repro (nor my
 code, not provided here) is doing anything strange.
>
> For the record, *a* work-around I found is to indeed define what appears
 to be under #ifdef in the ratio.hpp code. Like so, in your .cc or .cpp
 file:
>
> template <boost::intmax_t N, boost::intmax_t D>
> const boost::intmax_t boost::ratio<N, D>::num;
> template <boost::intmax_t N, boost::intmax_t D>
> const boost::intmax_t boost::ratio<N, D>::den;
>
> That should do it as a work-around. However, presumably it'll break if
 the compiler lacks constexpr, as it would be a duplicate or something
 along those lines.

 And of course it can be #ifndef'ed with BOOST_NO_CXX11_CONSTEXPR.

 OK, that's enough spam about work-arounds.

-- 
Ticket URL: <https://svn.boost.org/trac10/boost/ticket/13191#comment:4>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-11-03 05:37:03 UTC