Ошибка разрешения перегрузки при расширении пакета - PullRequest
0 голосов
/ 18 июня 2019

Когда я пытался внести некоторые изменения в свой код, я столкнулся с проблемой расширения пакета, где теоретически он должен компилироваться.

1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(20,2): error C2672:  'ExpandArgs': no matching overloaded function found
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(17): message :  see reference to function template instantiation 'void `anonymous-namespace'::ExpandArgs<const char(&)[9],>(boost::log::v2s_mt_nt6::record_ostream &,Arg)' being compiled
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(17): message :         with
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(17): message :         [
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(17): message :             Arg=const char (&)[9]
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(17): message :         ]
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(54): message :  see reference to function template instantiation 'void `anonymous-namespace'::ExpandArgs<const char(&)[9],std::string&>(boost::log::v2s_mt_nt6::record_ostream &,Arg,std::string &)' being compiled
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(54): message :         with
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(54): message :         [
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(54): message :             Arg=const char (&)[9]
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(54): message :         ]
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(77): message :  see reference to function template instantiation 'void CustomLogger::Log<boost::log::v2s_mt_nt6::sources::logger_mt,const char(&)[9],std::string&>(Logger &,const char (&)[9],std::string &)' being compiled
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(77): message :         with
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(77): message :         [
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(77): message :             Logger=boost::log::v2s_mt_nt6::sources::logger_mt
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(77): message :         ]
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(88): message :  see reference to function template instantiation 'void sA::Log<const char(&)[9],std::string&>(const char (&)[9],std::string &)' being compiled

1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(17,1): error C2780:  'void `anonymous-namespace'::ExpandArgs(boost::log::v2s_mt_nt6::record_ostream &,Arg &&,Args &&...)': expects 3 arguments - 1 provided
1>C:\Projects\PocTemplateOverloadingResolution\Source.cpp(16): message :  see declaration of '`anonymous-namespace'::ExpandArgs'

Код: Ссылка на код

Я использую Visual Studio 2019 (v142) Версия SDK: 10.0.18362.0

Может кто-нибудь увидеть проблему?

1 Ответ

0 голосов
/ 19 июня 2019

Кто-нибудь может увидеть проблему?

Не уверен (извините: нет опыта с наддувом), но ...

template< typename Arg, typename ...Args >
void ExpandArgs(boost::log::record_ostream& stream, Arg&& arg, Args&&... args)
{
    ExpandArgs(stream, std::forward< Arg >(arg));

    ExpandArgs(stream, std::forward<Args>(args)...); // SHOULD COMPILE, right?
    //ExpandArgs(stream, "xpto", std::string("xpto"));
}

template< typename Arg >
void ExpandArgs(boost::log::record_ostream& stream, Arg&& arg)
{
    stream << std::forward< Arg >(arg);
}

как насчет того, когда Args... пусто, в поле "ДОЛЖНО Скомпилироваться, верно?" звоните

ExpandArgs(stream, std::forward<Args>(args)...); // ???

Звонок становится

ExpandArgs(stream);

но я не вижу функции ExpandArgs(), которая получает только аргумент потока.

Полагаю, вы можете добавить кейс для терминала следующим образом

void ExpandArgs (boost::log::record_ostream &)
 { }

для решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...