MSVC v16 'static const' error

I just got this error from MSVC v16 while trying to compile
atsc_sync_impl.cc:
g:\gv\dx-radio\gnuradio-3.x\gr-dtv\lib\atsc\atsc_sync_impl.h(37) :
error C2864: ‘gr::dtv::atsc_sync_impl::LOOP_FILTER_TAP’ : only static
const
integral data members can be initialized within a class

g:\gv\dx-radio\gnuradio-3.x\gr-dtv\lib\atsc\atsc_sync_impl.h(38) :
error C2864: ‘gr::dtv::atsc_sync_impl::ADJUSTMENT_GAIN’ : only static
const
integral data members can be initialized within a class

The code works fine with g++ 4.7.2. I figured these ‘private const data’
had to be initialised in the .cc-file. Here is how I patched it:

— atsc_sync_impl.cc.orig 2014-08-18 22:46:57 +0000
+++ atsc_sync_impl.cc 2014-10-15 19:14:01 +0000
@@ -31,6 +31,9 @@
namespace gr {
namespace dtv {

  • const double atsc_sync_impl::LOOP_FILTER_TAP = 0.0005; //
    0.0005 works
  • const double atsc_sync_impl::ADJUSTMENT_GAIN = 1.0e-5 / (10 *
    ATSC_DATA_SEGMENT_LENGTH);
  • atsc_sync::sptr
    atsc_sync::make(float rate)
    {
    — atsc_sync_impl.h.orig 2014-08-18 22:46:57 +0000
    +++ ./atsc_sync_impl.h 2014-10-15 19:24:45 +0000
    @@ -34,8 +34,8 @@
    class atsc_sync_impl : public atsc_sync
    {
    private:
  •  static const double LOOP_FILTER_TAP = 0.0005;    // 0.0005 works
    
  •  static const double ADJUSTMENT_GAIN = 1.0e-5 / (10 * 
    

ATSC_DATA_SEGMENT_LENGTH);

  •  static const double LOOP_FILTER_TAP; // = 0.0005
    
  •  static const double ADJUSTMENT_GAIN; // = 1.0e-5 / (10 * 
    

ATSC_DATA_SEGMENT_LENGTH);
static const int SYMBOL_INDEX_OFFSET = 3;
static const int MIN_SEG_LOCK_CORRELATION_VALUE = 5;
static const int SSI_MIN = -16;

–gv

Gisle,

Please open this as a ticket in our Issue tracker so that it doesn’t get
lost in the email archives.

Thanks,
Tom