Почему std :: filesystem :: path :: compare () и boost :: filesystem :: path :: compare () различаются? - PullRequest
2 голосов
/ 13 апреля 2020

Учитывая следующий код:

  fs::path p{ "a/b/" };
  fs::path q{ "a/b/." };  
  assert(p == q);         

[Обратите внимание на дополнительную точку в конце строки, определяющей q.]

С учетом вышеизложенного, boost :: filesystem принимает p == q как истина, но реализация std :: filesystem g cc и llvm говорят, что это ложно.

Почему расхождение между boost и std?

PS В предыдущих версиях этого вопрос, я ошибочно думал, что пути должны были быть нормализованы до сравнения. Это не относится к делу. Несмотря на это, несоответствие между boost и std все еще остается для меня загадкой.

1 Ответ

1 голос
/ 14 апреля 2020

Короткий ответ: . на Unix - это фактическая ссылка на узел файловой системы, и это иногда имеет значение. См. этот ответ о переполнении стека .

РЕДАКТИРОВАТЬ

Однако я не могу позволить себе знать намерения Стандартного комитета в отношении поведения библиотеки файловой системы, и при этом я не думаю, что это Разумно, чтобы библиотека знала так много о Unix поведении символических ссылок. Короче говоря, это может или не может быть просто причудой стандартной формулировки против мнения Буста о том, как все должно работать.

...