模板扣除错误

时间:2016-12-10 15:30:02

标签: c++ c++11 visual-studio-2013 stl

注意:请不要与其他具有相同标题/ errocode的Stackoverflow问题混淆 - 它们主要是由于缺少#include <string>,但这不是问题。

当我尝试编译它时,我正在阅读Pretty-print C++ STL containers问题并从他的GitHub Project cxx-prettyprint下载Kerrek的代码(我的环境是Windows 7,Visual Studio 2013,编译项目为控制台应用程序&#34;使用多字节字符集&#34;),点击模板扣除错误。

Mike Jinhan在评论中建议它有点奇怪,它编译编译并使用当前的MSVC ++运行良好:see it online

我很困惑,我的配置肯定有问题。我创建了一个空白的新Windows控制台应用程序,并添加了Kerrek的代码,专注于字符串测试转换的向量,删除了其他方案,如set / map等:

int main(int argc, char* argv[])
{ 
    std::vector<std::string> v;  

    v.push_back("hello, world"); 
    v.push_back("2nd line");
    v.push_back("last line");

    std::cout << v;
}

,现在出现错误:

  

错误1错误C2679:二进制&#39;&lt;&lt;&#39; :找不到哪个运营商需要   类型的右手操作数   &#39;的std ::矢量&GT;&#39; (或者没有   可接受的转换)

如果我明确调用pretty_print::operator <<

pretty_print::operator<<(std::cout, v);

,点击另一个模板扣除错误:

  

错误1错误C2784:&#39; std :: basic_ostream&lt; _Elem,_Traits&gt;   &amp; pretty_print :: operator&lt;&lt;(std :: basic_ostream&lt; _Elem,_Traits&gt;&amp;,const   pretty_print :: print_container_helper   &安培;)&#39; :无法推断出&#39; const的模板参数   pretty_print :: print_container_helper   &安培;&#39;来自&#39; std :: vector&gt;&#39;

只有在明确创建print_container_helper时才会编译:

pretty_print::print_container_helper<std::vector<std::string>, char, ::std::char_traits<char>, pretty_print::delimiters<std::vector<std::string>, char>>
    vh(v);
pretty_print::operator<<(std::cout, vh);

完整代码在此处:http://rextester.com/RJX76690

0 个答案:

没有答案