Шаблон класса для удаления константности, изменчивости и ссылочности не скомпилируется после обновления Boost / compiler - PullRequest
0 голосов
/ 24 октября 2019

Я недавно обновил версию Boost, которую я использую, с 1.59 до 1.68. Кроме того, я также обновил версию Visual Studio, которую я использую, с 2015 по 2017 год. После этих изменений не удается скомпилировать приведенный ниже шаблон класса, который используется для удаления константности, изменчивости и ссылочности.

// Class for removing constness, volatileness and referenceness
template<typename T>
struct Cleaner
{
    // Part1: Remove referenceness and constness at the highest level
    typedef  
        typename boost::remove_cv< 
            typename  boost::remove_reference<typename T>::type 
        >::type 
        CleanPart1;

    // Part2: If pointer, remove the const under the pointer and re-add the pointer
    typedef typename 
        typename boost::mpl::if_c< !boost::is_pointer< CleanPart1 >::value, 
            typename CleanPart1,
            typename boost::add_pointer< 
                typename boost::remove_cv< 
                    typename boost::remove_pointer<CleanPart1>::type
                >::type
            >::type
        >::type 
        CleanPart2;

    // Store final clean type
    typedef CleanPart2 Type;
};

Указанный шаблон класса можно использовать следующим образом в шаблоне функции, который получает параметр шаблона T:

typedef typename Cleaner<T>::Type CleanT;

Ошибки компиляции, отображаемые в Visual Studio, весьма загадочны:

error C2143: syntax error: missing ';' before '<'
note: see reference to class template instantiation 'Cleaner<T>'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
error C3646: 'Type': unknown override specifier
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Я давно изучаю этот код и не могу найти причину, по которой он не компилируется. Все выглядит правильно для меня. Кто-нибудь видит, чего мне не хватает?

...