VS2013与VS2012 </filesystem>中<filesystem>的不同行为

时间:2014-02-11 06:26:00

标签: c++ visual-studio-2012 visual-studio-2013 std

我在此测试程序中VS2012 Update 4和VS2013 Update 1之间的行为有所不同:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <filesystem>

using namespace std;
using namespace std::tr2::sys;

void main()
{
  string s("C:\\");

  for (auto i = directory_iterator(path(s).parent_path()); i != directory_iterator(); ++i) 
    cout << (path(s).parent_path()/i->path()).string() << endl;
}

VS2012产生:

C:AUTOEXEC.BAT
...

VS2013产生:

C:C:AUTOEXEC.BAT
...

哪种行为符合C ++标准?

修改

由于filesystem尚未使用C ++标准,但只是library proposal,我将重新提出一个问题:VS2013的行为是一个错误吗?

1 个答案:

答案 0 :(得分:4)

我认为这是VC ++ 2012中的一个错误。以下摘自C++11/14 STL Features, Fixes, And Breaking Changes In VS 2013

  

&lt; filesystem&gt;的directory_iterator也返回了路径   简短(DevDiv#411531)。 (注意recursive_directory_iterator有效   正确。)我们修改了directory_iterator以遵循N1975,   Filesystem V2草案。 (Filesystem V3在我们的雷达上,但它不会   在2013 RTM实施。)

您可以找到N1975 here