use marcro protect all code with exception

This commit is contained in:
okhowang(王沛文) 2020-04-07 11:40:42 +08:00
parent 2671c2f83b
commit a0ef036074

View File

@ -278,10 +278,12 @@ public:
path(const Source& source, format fmt = auto_format); path(const Source& source, format fmt = auto_format);
template <class InputIterator> template <class InputIterator>
path(InputIterator first, InputIterator last, format fmt = auto_format); path(InputIterator first, InputIterator last, format fmt = auto_format);
#ifdef __cpp_exceptions
template <class Source, typename = path_from_string<Source>> template <class Source, typename = path_from_string<Source>>
path(const Source& source, const std::locale& loc, format fmt = auto_format); path(const Source& source, const std::locale& loc, format fmt = auto_format);
template <class InputIterator> template <class InputIterator>
path(InputIterator first, InputIterator last, const std::locale& loc, format fmt = auto_format); path(InputIterator first, InputIterator last, const std::locale& loc, format fmt = auto_format);
#endif
~path(); ~path();
// 30.10.8.4.2 assignments // 30.10.8.4.2 assignments
@ -617,7 +619,9 @@ public:
directory_entry() noexcept = default; directory_entry() noexcept = default;
directory_entry(const directory_entry&) = default; directory_entry(const directory_entry&) = default;
directory_entry(directory_entry&&) noexcept = default; directory_entry(directory_entry&&) noexcept = default;
#ifdef __cpp_exceptions
explicit directory_entry(const path& p); explicit directory_entry(const path& p);
#endif
directory_entry(const path& p, std::error_code& ec); directory_entry(const path& p, std::error_code& ec);
~directory_entry(); ~directory_entry();
@ -626,45 +630,79 @@ public:
directory_entry& operator=(directory_entry&&) noexcept = default; directory_entry& operator=(directory_entry&&) noexcept = default;
// 30.10.12.2 modifiers // 30.10.12.2 modifiers
#ifdef __cpp_exceptions
void assign(const path& p); void assign(const path& p);
#endif
void assign(const path& p, std::error_code& ec); void assign(const path& p, std::error_code& ec);
#ifdef __cpp_exceptions
void replace_filename(const path& p); void replace_filename(const path& p);
#endif
void replace_filename(const path& p, std::error_code& ec); void replace_filename(const path& p, std::error_code& ec);
#ifdef __cpp_exceptions
void refresh(); void refresh();
#endif
void refresh(std::error_code& ec) noexcept; void refresh(std::error_code& ec) noexcept;
// 30.10.12.3 observers // 30.10.12.3 observers
const filesystem::path& path() const noexcept; const filesystem::path& path() const noexcept;
operator const filesystem::path&() const noexcept; operator const filesystem::path&() const noexcept;
#ifdef __cpp_exceptions
bool exists() const; bool exists() const;
#endif
bool exists(std::error_code& ec) const noexcept; bool exists(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
bool is_block_file() const; bool is_block_file() const;
#endif
bool is_block_file(std::error_code& ec) const noexcept; bool is_block_file(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
bool is_character_file() const; bool is_character_file() const;
#endif
bool is_character_file(std::error_code& ec) const noexcept; bool is_character_file(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
bool is_directory() const; bool is_directory() const;
#endif
bool is_directory(std::error_code& ec) const noexcept; bool is_directory(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
bool is_fifo() const; bool is_fifo() const;
#endif
bool is_fifo(std::error_code& ec) const noexcept; bool is_fifo(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
bool is_other() const; bool is_other() const;
#endif
bool is_other(std::error_code& ec) const noexcept; bool is_other(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
bool is_regular_file() const; bool is_regular_file() const;
#endif
bool is_regular_file(std::error_code& ec) const noexcept; bool is_regular_file(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
bool is_socket() const; bool is_socket() const;
#endif
bool is_socket(std::error_code& ec) const noexcept; bool is_socket(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
bool is_symlink() const; bool is_symlink() const;
#endif
bool is_symlink(std::error_code& ec) const noexcept; bool is_symlink(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
uintmax_t file_size() const; uintmax_t file_size() const;
#endif
uintmax_t file_size(std::error_code& ec) const noexcept; uintmax_t file_size(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
uintmax_t hard_link_count() const; uintmax_t hard_link_count() const;
#endif
uintmax_t hard_link_count(std::error_code& ec) const noexcept; uintmax_t hard_link_count(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
file_time_type last_write_time() const; file_time_type last_write_time() const;
#endif
file_time_type last_write_time(std::error_code& ec) const noexcept; file_time_type last_write_time(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
file_status status() const; file_status status() const;
#endif
file_status status(std::error_code& ec) const noexcept; file_status status(std::error_code& ec) const noexcept;
#ifdef __cpp_exceptions
file_status symlink_status() const; file_status symlink_status() const;
#endif
file_status symlink_status(std::error_code& ec) const noexcept; file_status symlink_status(std::error_code& ec) const noexcept;
bool operator<(const directory_entry& rhs) const noexcept; bool operator<(const directory_entry& rhs) const noexcept;
bool operator==(const directory_entry& rhs) const noexcept; bool operator==(const directory_entry& rhs) const noexcept;
@ -712,8 +750,10 @@ public:
// 30.10.13.1 member functions // 30.10.13.1 member functions
directory_iterator() noexcept; directory_iterator() noexcept;
#ifdef __cpp_exceptions
explicit directory_iterator(const path& p); explicit directory_iterator(const path& p);
directory_iterator(const path& p, directory_options options); directory_iterator(const path& p, directory_options options);
#endif
directory_iterator(const path& p, std::error_code& ec) noexcept; directory_iterator(const path& p, std::error_code& ec) noexcept;
directory_iterator(const path& p, directory_options options, std::error_code& ec) noexcept; directory_iterator(const path& p, directory_options options, std::error_code& ec) noexcept;
directory_iterator(const directory_iterator& rhs); directory_iterator(const directory_iterator& rhs);
@ -723,16 +763,20 @@ public:
directory_iterator& operator=(directory_iterator&& rhs) noexcept; directory_iterator& operator=(directory_iterator&& rhs) noexcept;
const directory_entry& operator*() const; const directory_entry& operator*() const;
const directory_entry* operator->() const; const directory_entry* operator->() const;
#ifdef __cpp_exceptions
directory_iterator& operator++(); directory_iterator& operator++();
#endif
directory_iterator& increment(std::error_code& ec) noexcept; directory_iterator& increment(std::error_code& ec) noexcept;
// other members as required by 27.2.3, input iterators // other members as required by 27.2.3, input iterators
#ifdef __cpp_exceptions
proxy operator++(int) proxy operator++(int)
{ {
proxy p{**this}; proxy p{**this};
++*this; ++*this;
return p; return p;
} }
#endif
bool operator==(const directory_iterator& rhs) const; bool operator==(const directory_iterator& rhs) const;
bool operator!=(const directory_iterator& rhs) const; bool operator!=(const directory_iterator& rhs) const;
@ -758,8 +802,10 @@ public:
// 30.10.14.1 constructors and destructor // 30.10.14.1 constructors and destructor
recursive_directory_iterator() noexcept; recursive_directory_iterator() noexcept;
#ifdef __cpp_exceptions
explicit recursive_directory_iterator(const path& p); explicit recursive_directory_iterator(const path& p);
recursive_directory_iterator(const path& p, directory_options options); recursive_directory_iterator(const path& p, directory_options options);
#endif
recursive_directory_iterator(const path& p, directory_options options, std::error_code& ec) noexcept; recursive_directory_iterator(const path& p, directory_options options, std::error_code& ec) noexcept;
recursive_directory_iterator(const path& p, std::error_code& ec) noexcept; recursive_directory_iterator(const path& p, std::error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator& rhs); recursive_directory_iterator(const recursive_directory_iterator& rhs);
@ -777,20 +823,26 @@ public:
// 30.10.14.1 modifiers recursive_directory_iterator& // 30.10.14.1 modifiers recursive_directory_iterator&
recursive_directory_iterator& operator=(const recursive_directory_iterator& rhs); recursive_directory_iterator& operator=(const recursive_directory_iterator& rhs);
recursive_directory_iterator& operator=(recursive_directory_iterator&& rhs) noexcept; recursive_directory_iterator& operator=(recursive_directory_iterator&& rhs) noexcept;
#ifdef __cpp_exceptions
recursive_directory_iterator& operator++(); recursive_directory_iterator& operator++();
#endif
recursive_directory_iterator& increment(std::error_code& ec) noexcept; recursive_directory_iterator& increment(std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
void pop(); void pop();
#endif
void pop(std::error_code& ec); void pop(std::error_code& ec);
void disable_recursion_pending(); void disable_recursion_pending();
// other members as required by 27.2.3, input iterators // other members as required by 27.2.3, input iterators
#ifdef __cpp_exceptions
directory_iterator::proxy operator++(int) directory_iterator::proxy operator++(int)
{ {
directory_iterator::proxy proxy{**this}; directory_iterator::proxy proxy{**this};
++*this; ++*this;
return proxy; return proxy;
} }
#endif
bool operator==(const recursive_directory_iterator& rhs) const; bool operator==(const recursive_directory_iterator& rhs) const;
bool operator!=(const recursive_directory_iterator& rhs) const; bool operator!=(const recursive_directory_iterator& rhs) const;
@ -814,135 +866,221 @@ GHC_FS_API recursive_directory_iterator begin(recursive_directory_iterator iter)
GHC_FS_API recursive_directory_iterator end(const recursive_directory_iterator&) noexcept; GHC_FS_API recursive_directory_iterator end(const recursive_directory_iterator&) noexcept;
// 30.10.15 filesystem operations // 30.10.15 filesystem operations
#ifdef __cpp_exceptions
GHC_FS_API path absolute(const path& p); GHC_FS_API path absolute(const path& p);
#endif
GHC_FS_API path absolute(const path& p, std::error_code& ec); GHC_FS_API path absolute(const path& p, std::error_code& ec);
#ifdef __cpp_exceptions
GHC_FS_API path canonical(const path& p); GHC_FS_API path canonical(const path& p);
#endif
GHC_FS_API path canonical(const path& p, std::error_code& ec); GHC_FS_API path canonical(const path& p, std::error_code& ec);
#ifdef __cpp_exceptions
GHC_FS_API void copy(const path& from, const path& to); GHC_FS_API void copy(const path& from, const path& to);
#endif
GHC_FS_API void copy(const path& from, const path& to, std::error_code& ec) noexcept; GHC_FS_API void copy(const path& from, const path& to, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API void copy(const path& from, const path& to, copy_options options); GHC_FS_API void copy(const path& from, const path& to, copy_options options);
#endif
GHC_FS_API void copy(const path& from, const path& to, copy_options options, std::error_code& ec) noexcept; GHC_FS_API void copy(const path& from, const path& to, copy_options options, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool copy_file(const path& from, const path& to); GHC_FS_API bool copy_file(const path& from, const path& to);
#endif
GHC_FS_API bool copy_file(const path& from, const path& to, std::error_code& ec) noexcept; GHC_FS_API bool copy_file(const path& from, const path& to, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool copy_file(const path& from, const path& to, copy_options option); GHC_FS_API bool copy_file(const path& from, const path& to, copy_options option);
#endif
GHC_FS_API bool copy_file(const path& from, const path& to, copy_options option, std::error_code& ec) noexcept; GHC_FS_API bool copy_file(const path& from, const path& to, copy_options option, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API void copy_symlink(const path& existing_symlink, const path& new_symlink); GHC_FS_API void copy_symlink(const path& existing_symlink, const path& new_symlink);
#endif
GHC_FS_API void copy_symlink(const path& existing_symlink, const path& new_symlink, std::error_code& ec) noexcept; GHC_FS_API void copy_symlink(const path& existing_symlink, const path& new_symlink, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool create_directories(const path& p); GHC_FS_API bool create_directories(const path& p);
#endif
GHC_FS_API bool create_directories(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool create_directories(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool create_directory(const path& p); GHC_FS_API bool create_directory(const path& p);
#endif
GHC_FS_API bool create_directory(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool create_directory(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool create_directory(const path& p, const path& attributes); GHC_FS_API bool create_directory(const path& p, const path& attributes);
#endif
GHC_FS_API bool create_directory(const path& p, const path& attributes, std::error_code& ec) noexcept; GHC_FS_API bool create_directory(const path& p, const path& attributes, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API void create_directory_symlink(const path& to, const path& new_symlink); GHC_FS_API void create_directory_symlink(const path& to, const path& new_symlink);
#endif
GHC_FS_API void create_directory_symlink(const path& to, const path& new_symlink, std::error_code& ec) noexcept; GHC_FS_API void create_directory_symlink(const path& to, const path& new_symlink, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API void create_hard_link(const path& to, const path& new_hard_link); GHC_FS_API void create_hard_link(const path& to, const path& new_hard_link);
#endif
GHC_FS_API void create_hard_link(const path& to, const path& new_hard_link, std::error_code& ec) noexcept; GHC_FS_API void create_hard_link(const path& to, const path& new_hard_link, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API void create_symlink(const path& to, const path& new_symlink); GHC_FS_API void create_symlink(const path& to, const path& new_symlink);
#endif
GHC_FS_API void create_symlink(const path& to, const path& new_symlink, std::error_code& ec) noexcept; GHC_FS_API void create_symlink(const path& to, const path& new_symlink, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API path current_path(); GHC_FS_API path current_path();
#endif
GHC_FS_API path current_path(std::error_code& ec); GHC_FS_API path current_path(std::error_code& ec);
#ifdef __cpp_exceptions
GHC_FS_API void current_path(const path& p); GHC_FS_API void current_path(const path& p);
#endif
GHC_FS_API void current_path(const path& p, std::error_code& ec) noexcept; GHC_FS_API void current_path(const path& p, std::error_code& ec) noexcept;
GHC_FS_API bool exists(file_status s) noexcept; GHC_FS_API bool exists(file_status s) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool exists(const path& p); GHC_FS_API bool exists(const path& p);
#endif
GHC_FS_API bool exists(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool exists(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool equivalent(const path& p1, const path& p2); GHC_FS_API bool equivalent(const path& p1, const path& p2);
#endif
GHC_FS_API bool equivalent(const path& p1, const path& p2, std::error_code& ec) noexcept; GHC_FS_API bool equivalent(const path& p1, const path& p2, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API uintmax_t file_size(const path& p); GHC_FS_API uintmax_t file_size(const path& p);
#endif
GHC_FS_API uintmax_t file_size(const path& p, std::error_code& ec) noexcept; GHC_FS_API uintmax_t file_size(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API uintmax_t hard_link_count(const path& p); GHC_FS_API uintmax_t hard_link_count(const path& p);
#endif
GHC_FS_API uintmax_t hard_link_count(const path& p, std::error_code& ec) noexcept; GHC_FS_API uintmax_t hard_link_count(const path& p, std::error_code& ec) noexcept;
GHC_FS_API bool is_block_file(file_status s) noexcept; GHC_FS_API bool is_block_file(file_status s) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool is_block_file(const path& p); GHC_FS_API bool is_block_file(const path& p);
#endif
GHC_FS_API bool is_block_file(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool is_block_file(const path& p, std::error_code& ec) noexcept;
GHC_FS_API bool is_character_file(file_status s) noexcept; GHC_FS_API bool is_character_file(file_status s) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool is_character_file(const path& p); GHC_FS_API bool is_character_file(const path& p);
#endif
GHC_FS_API bool is_character_file(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool is_character_file(const path& p, std::error_code& ec) noexcept;
GHC_FS_API bool is_directory(file_status s) noexcept; GHC_FS_API bool is_directory(file_status s) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool is_directory(const path& p); GHC_FS_API bool is_directory(const path& p);
#endif
GHC_FS_API bool is_directory(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool is_directory(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool is_empty(const path& p); GHC_FS_API bool is_empty(const path& p);
#endif
GHC_FS_API bool is_empty(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool is_empty(const path& p, std::error_code& ec) noexcept;
GHC_FS_API bool is_fifo(file_status s) noexcept; GHC_FS_API bool is_fifo(file_status s) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool is_fifo(const path& p); GHC_FS_API bool is_fifo(const path& p);
#endif
GHC_FS_API bool is_fifo(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool is_fifo(const path& p, std::error_code& ec) noexcept;
GHC_FS_API bool is_other(file_status s) noexcept; GHC_FS_API bool is_other(file_status s) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool is_other(const path& p); GHC_FS_API bool is_other(const path& p);
#endif
GHC_FS_API bool is_other(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool is_other(const path& p, std::error_code& ec) noexcept;
GHC_FS_API bool is_regular_file(file_status s) noexcept; GHC_FS_API bool is_regular_file(file_status s) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool is_regular_file(const path& p); GHC_FS_API bool is_regular_file(const path& p);
#endif
GHC_FS_API bool is_regular_file(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool is_regular_file(const path& p, std::error_code& ec) noexcept;
GHC_FS_API bool is_socket(file_status s) noexcept; GHC_FS_API bool is_socket(file_status s) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool is_socket(const path& p); GHC_FS_API bool is_socket(const path& p);
#endif
GHC_FS_API bool is_socket(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool is_socket(const path& p, std::error_code& ec) noexcept;
GHC_FS_API bool is_symlink(file_status s) noexcept; GHC_FS_API bool is_symlink(file_status s) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API bool is_symlink(const path& p); GHC_FS_API bool is_symlink(const path& p);
#endif
GHC_FS_API bool is_symlink(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool is_symlink(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API file_time_type last_write_time(const path& p); GHC_FS_API file_time_type last_write_time(const path& p);
#endif
GHC_FS_API file_time_type last_write_time(const path& p, std::error_code& ec) noexcept; GHC_FS_API file_time_type last_write_time(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API void last_write_time(const path& p, file_time_type new_time); GHC_FS_API void last_write_time(const path& p, file_time_type new_time);
#endif
GHC_FS_API void last_write_time(const path& p, file_time_type new_time, std::error_code& ec) noexcept; GHC_FS_API void last_write_time(const path& p, file_time_type new_time, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API void permissions(const path& p, perms prms, perm_options opts = perm_options::replace); GHC_FS_API void permissions(const path& p, perms prms, perm_options opts = perm_options::replace);
#endif
GHC_FS_API void permissions(const path& p, perms prms, std::error_code& ec) noexcept; GHC_FS_API void permissions(const path& p, perms prms, std::error_code& ec) noexcept;
GHC_FS_API void permissions(const path& p, perms prms, perm_options opts, std::error_code& ec); GHC_FS_API void permissions(const path& p, perms prms, perm_options opts, std::error_code& ec);
#ifdef __cpp_exceptions
GHC_FS_API path proximate(const path& p, std::error_code& ec); GHC_FS_API path proximate(const path& p, std::error_code& ec);
GHC_FS_API path proximate(const path& p, const path& base = current_path()); GHC_FS_API path proximate(const path& p, const path& base = current_path());
#endif
GHC_FS_API path proximate(const path& p, const path& base, std::error_code& ec); GHC_FS_API path proximate(const path& p, const path& base, std::error_code& ec);
#ifdef __cpp_exceptions
GHC_FS_API path read_symlink(const path& p); GHC_FS_API path read_symlink(const path& p);
#endif
GHC_FS_API path read_symlink(const path& p, std::error_code& ec); GHC_FS_API path read_symlink(const path& p, std::error_code& ec);
GHC_FS_API path relative(const path& p, std::error_code& ec); GHC_FS_API path relative(const path& p, std::error_code& ec);
#ifdef __cpp_exceptions
GHC_FS_API path relative(const path& p, const path& base = current_path()); GHC_FS_API path relative(const path& p, const path& base = current_path());
#endif
GHC_FS_API path relative(const path& p, const path& base, std::error_code& ec); GHC_FS_API path relative(const path& p, const path& base, std::error_code& ec);
#ifdef __cpp_exceptions
GHC_FS_API bool remove(const path& p); GHC_FS_API bool remove(const path& p);
#endif
GHC_FS_API bool remove(const path& p, std::error_code& ec) noexcept; GHC_FS_API bool remove(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API uintmax_t remove_all(const path& p); GHC_FS_API uintmax_t remove_all(const path& p);
#endif
GHC_FS_API uintmax_t remove_all(const path& p, std::error_code& ec) noexcept; GHC_FS_API uintmax_t remove_all(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API void rename(const path& from, const path& to); GHC_FS_API void rename(const path& from, const path& to);
#endif
GHC_FS_API void rename(const path& from, const path& to, std::error_code& ec) noexcept; GHC_FS_API void rename(const path& from, const path& to, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API void resize_file(const path& p, uintmax_t size); GHC_FS_API void resize_file(const path& p, uintmax_t size);
#endif
GHC_FS_API void resize_file(const path& p, uintmax_t size, std::error_code& ec) noexcept; GHC_FS_API void resize_file(const path& p, uintmax_t size, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API space_info space(const path& p); GHC_FS_API space_info space(const path& p);
#endif
GHC_FS_API space_info space(const path& p, std::error_code& ec) noexcept; GHC_FS_API space_info space(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API file_status status(const path& p); GHC_FS_API file_status status(const path& p);
#endif
GHC_FS_API file_status status(const path& p, std::error_code& ec) noexcept; GHC_FS_API file_status status(const path& p, std::error_code& ec) noexcept;
GHC_FS_API bool status_known(file_status s) noexcept; GHC_FS_API bool status_known(file_status s) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API file_status symlink_status(const path& p); GHC_FS_API file_status symlink_status(const path& p);
#endif
GHC_FS_API file_status symlink_status(const path& p, std::error_code& ec) noexcept; GHC_FS_API file_status symlink_status(const path& p, std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API path temp_directory_path(); GHC_FS_API path temp_directory_path();
#endif
GHC_FS_API path temp_directory_path(std::error_code& ec) noexcept; GHC_FS_API path temp_directory_path(std::error_code& ec) noexcept;
#ifdef __cpp_exceptions
GHC_FS_API path weakly_canonical(const path& p); GHC_FS_API path weakly_canonical(const path& p);
#endif
GHC_FS_API path weakly_canonical(const path& p, std::error_code& ec) noexcept; GHC_FS_API path weakly_canonical(const path& p, std::error_code& ec) noexcept;
// Non-C++17 add-on std::fstream wrappers with path // Non-C++17 add-on std::fstream wrappers with path
@ -3177,10 +3315,12 @@ GHC_INLINE path canonical(const path& p, std::error_code& ec)
return result; return result;
} }
#ifdef __cpp_exceptions
GHC_INLINE void copy(const path& from, const path& to) GHC_INLINE void copy(const path& from, const path& to)
{ {
copy(from, to, copy_options::none); copy(from, to, copy_options::none);
} }
#endif
GHC_INLINE void copy(const path& from, const path& to, std::error_code& ec) noexcept GHC_INLINE void copy(const path& from, const path& to, std::error_code& ec) noexcept
{ {
@ -3274,10 +3414,12 @@ GHC_INLINE void copy(const path& from, const path& to, copy_options options, std
return; return;
} }
#ifdef __cpp_exceptions
GHC_INLINE bool copy_file(const path& from, const path& to) GHC_INLINE bool copy_file(const path& from, const path& to)
{ {
return copy_file(from, to, copy_options::none); return copy_file(from, to, copy_options::none);
} }
#endif
GHC_INLINE bool copy_file(const path& from, const path& to, std::error_code& ec) noexcept GHC_INLINE bool copy_file(const path& from, const path& to, std::error_code& ec) noexcept
{ {
@ -3628,10 +3770,12 @@ GHC_INLINE bool exists(file_status s) noexcept
return status_known(s) && s.type() != file_type::not_found; return status_known(s) && s.type() != file_type::not_found;
} }
#ifdef __cpp_exceptions
GHC_INLINE bool exists(const path& p) GHC_INLINE bool exists(const path& p)
{ {
return exists(status(p)); return exists(status(p));
} }
#endif
GHC_INLINE bool exists(const path& p, std::error_code& ec) noexcept GHC_INLINE bool exists(const path& p, std::error_code& ec) noexcept
{ {
@ -3779,10 +3923,12 @@ GHC_INLINE bool is_block_file(file_status s) noexcept
return s.type() == file_type::block; return s.type() == file_type::block;
} }
#ifdef __cpp_exceptions
GHC_INLINE bool is_block_file(const path& p) GHC_INLINE bool is_block_file(const path& p)
{ {
return is_block_file(status(p)); return is_block_file(status(p));
} }
#endif
GHC_INLINE bool is_block_file(const path& p, std::error_code& ec) noexcept GHC_INLINE bool is_block_file(const path& p, std::error_code& ec) noexcept
{ {
@ -3794,10 +3940,12 @@ GHC_INLINE bool is_character_file(file_status s) noexcept
return s.type() == file_type::character; return s.type() == file_type::character;
} }
#ifdef __cpp_exceptions
GHC_INLINE bool is_character_file(const path& p) GHC_INLINE bool is_character_file(const path& p)
{ {
return is_character_file(status(p)); return is_character_file(status(p));
} }
#endif
GHC_INLINE bool is_character_file(const path& p, std::error_code& ec) noexcept GHC_INLINE bool is_character_file(const path& p, std::error_code& ec) noexcept
{ {
@ -3809,16 +3957,19 @@ GHC_INLINE bool is_directory(file_status s) noexcept
return s.type() == file_type::directory; return s.type() == file_type::directory;
} }
#ifdef __cpp_exceptions
GHC_INLINE bool is_directory(const path& p) GHC_INLINE bool is_directory(const path& p)
{ {
return is_directory(status(p)); return is_directory(status(p));
} }
#endif
GHC_INLINE bool is_directory(const path& p, std::error_code& ec) noexcept GHC_INLINE bool is_directory(const path& p, std::error_code& ec) noexcept
{ {
return is_directory(status(p, ec)); return is_directory(status(p, ec));
} }
#ifdef __cpp_exceptions
GHC_INLINE bool is_empty(const path& p) GHC_INLINE bool is_empty(const path& p)
{ {
if (is_directory(p)) { if (is_directory(p)) {
@ -3828,6 +3979,7 @@ GHC_INLINE bool is_empty(const path& p)
return file_size(p) == 0; return file_size(p) == 0;
} }
} }
#endif
GHC_INLINE bool is_empty(const path& p, std::error_code& ec) noexcept GHC_INLINE bool is_empty(const path& p, std::error_code& ec) noexcept
{ {
@ -3856,10 +4008,12 @@ GHC_INLINE bool is_fifo(file_status s) noexcept
return s.type() == file_type::fifo; return s.type() == file_type::fifo;
} }
#ifdef __cpp_exceptions
GHC_INLINE bool is_fifo(const path& p) GHC_INLINE bool is_fifo(const path& p)
{ {
return is_fifo(status(p)); return is_fifo(status(p));
} }
#endif
GHC_INLINE bool is_fifo(const path& p, std::error_code& ec) noexcept GHC_INLINE bool is_fifo(const path& p, std::error_code& ec) noexcept
{ {
@ -3871,10 +4025,12 @@ GHC_INLINE bool is_other(file_status s) noexcept
return exists(s) && !is_regular_file(s) && !is_directory(s) && !is_symlink(s); return exists(s) && !is_regular_file(s) && !is_directory(s) && !is_symlink(s);
} }
#ifdef __cpp_exceptions
GHC_INLINE bool is_other(const path& p) GHC_INLINE bool is_other(const path& p)
{ {
return is_other(status(p)); return is_other(status(p));
} }
#endif
GHC_INLINE bool is_other(const path& p, std::error_code& ec) noexcept GHC_INLINE bool is_other(const path& p, std::error_code& ec) noexcept
{ {
@ -3886,10 +4042,12 @@ GHC_INLINE bool is_regular_file(file_status s) noexcept
return s.type() == file_type::regular; return s.type() == file_type::regular;
} }
#ifdef __cpp_exceptions
GHC_INLINE bool is_regular_file(const path& p) GHC_INLINE bool is_regular_file(const path& p)
{ {
return is_regular_file(status(p)); return is_regular_file(status(p));
} }
#endif
GHC_INLINE bool is_regular_file(const path& p, std::error_code& ec) noexcept GHC_INLINE bool is_regular_file(const path& p, std::error_code& ec) noexcept
{ {
@ -3901,10 +4059,12 @@ GHC_INLINE bool is_socket(file_status s) noexcept
return s.type() == file_type::socket; return s.type() == file_type::socket;
} }
#ifdef __cpp_exceptions
GHC_INLINE bool is_socket(const path& p) GHC_INLINE bool is_socket(const path& p)
{ {
return is_socket(status(p)); return is_socket(status(p));
} }
#endif
GHC_INLINE bool is_socket(const path& p, std::error_code& ec) noexcept GHC_INLINE bool is_socket(const path& p, std::error_code& ec) noexcept
{ {
@ -3916,10 +4076,12 @@ GHC_INLINE bool is_symlink(file_status s) noexcept
return s.type() == file_type::symlink; return s.type() == file_type::symlink;
} }
#ifdef __cpp_exceptions
GHC_INLINE bool is_symlink(const path& p) GHC_INLINE bool is_symlink(const path& p)
{ {
return is_symlink(symlink_status(p)); return is_symlink(symlink_status(p));
} }
#endif
GHC_INLINE bool is_symlink(const path& p, std::error_code& ec) noexcept GHC_INLINE bool is_symlink(const path& p, std::error_code& ec) noexcept
{ {
@ -4073,15 +4235,19 @@ GHC_INLINE void permissions(const path& p, perms prms, perm_options opts, std::e
#endif #endif
} }
#ifdef __cpp_exceptions
GHC_INLINE path proximate(const path& p, std::error_code& ec) GHC_INLINE path proximate(const path& p, std::error_code& ec)
{ {
return proximate(p, current_path(), ec); return proximate(p, current_path(), ec);
} }
#endif
#ifdef __cpp_exceptions
GHC_INLINE path proximate(const path& p, const path& base) GHC_INLINE path proximate(const path& p, const path& base)
{ {
return weakly_canonical(p).lexically_proximate(weakly_canonical(base)); return weakly_canonical(p).lexically_proximate(weakly_canonical(base));
} }
#endif
GHC_INLINE path proximate(const path& p, const path& base, std::error_code& ec) GHC_INLINE path proximate(const path& p, const path& base, std::error_code& ec)
{ {
@ -4116,10 +4282,12 @@ GHC_INLINE path relative(const path& p, std::error_code& ec)
return relative(p, current_path(ec), ec); return relative(p, current_path(ec), ec);
} }
#ifdef __cpp_exceptions
GHC_INLINE path relative(const path& p, const path& base) GHC_INLINE path relative(const path& p, const path& base)
{ {
return weakly_canonical(p).lexically_relative(weakly_canonical(base)); return weakly_canonical(p).lexically_relative(weakly_canonical(base));
} }
#endif
GHC_INLINE path relative(const path& p, const path& base, std::error_code& ec) GHC_INLINE path relative(const path& p, const path& base, std::error_code& ec)
{ {
@ -4202,7 +4370,11 @@ GHC_INLINE uintmax_t remove_all(const path& p, std::error_code& ec) noexcept
if (ec) { if (ec) {
break; break;
} }
if (!iter->is_symlink() && iter->is_directory()) { bool is_symlink_result = iter->is_symlink(ec);
if (ec) return static_cast<uintmax_t>(-1);
bool is_directory_result = iter->is_directory(ec);
if (ec) return static_cast<uintmax_t>(-1);
if (!is_symlink_result && is_directory_result) {
count += remove_all(iter->path(), ec); count += remove_all(iter->path(), ec);
if (ec) { if (ec) {
return static_cast<uintmax_t>(-1); return static_cast<uintmax_t>(-1);
@ -4531,6 +4703,7 @@ GHC_INLINE perms file_status::permissions() const noexcept
// directory_entry::directory_entry() noexcept = default; // directory_entry::directory_entry() noexcept = default;
// directory_entry::directory_entry(const directory_entry&) = default; // directory_entry::directory_entry(const directory_entry&) = default;
// directory_entry::directory_entry(directory_entry&&) noexcept = default; // directory_entry::directory_entry(directory_entry&&) noexcept = default;
#ifdef __cpp_exceptions
GHC_INLINE directory_entry::directory_entry(const filesystem::path& p) GHC_INLINE directory_entry::directory_entry(const filesystem::path& p)
: _path(p) : _path(p)
, _file_size(0) , _file_size(0)
@ -4541,6 +4714,7 @@ GHC_INLINE directory_entry::directory_entry(const filesystem::path& p)
{ {
refresh(); refresh();
} }
#endif
GHC_INLINE directory_entry::directory_entry(const filesystem::path& p, std::error_code& ec) GHC_INLINE directory_entry::directory_entry(const filesystem::path& p, std::error_code& ec)
: _path(p) : _path(p)
@ -4560,11 +4734,13 @@ GHC_INLINE directory_entry::~directory_entry() {}
// directory_entry& directory_entry::operator=(directory_entry&&) noexcept = default; // directory_entry& directory_entry::operator=(directory_entry&&) noexcept = default;
// 30.10.12.2 directory_entry modifiers // 30.10.12.2 directory_entry modifiers
#ifdef __cpp_exceptions
GHC_INLINE void directory_entry::assign(const filesystem::path& p) GHC_INLINE void directory_entry::assign(const filesystem::path& p)
{ {
_path = p; _path = p;
refresh(); refresh();
} }
#endif
GHC_INLINE void directory_entry::assign(const filesystem::path& p, std::error_code& ec) GHC_INLINE void directory_entry::assign(const filesystem::path& p, std::error_code& ec)
{ {
@ -4572,11 +4748,13 @@ GHC_INLINE void directory_entry::assign(const filesystem::path& p, std::error_co
refresh(ec); refresh(ec);
} }
#ifdef __cpp_exceptions
GHC_INLINE void directory_entry::replace_filename(const filesystem::path& p) GHC_INLINE void directory_entry::replace_filename(const filesystem::path& p)
{ {
_path.replace_filename(p); _path.replace_filename(p);
refresh(); refresh();
} }
#endif
GHC_INLINE void directory_entry::replace_filename(const filesystem::path& p, std::error_code& ec) GHC_INLINE void directory_entry::replace_filename(const filesystem::path& p, std::error_code& ec)
{ {
@ -4615,95 +4793,114 @@ GHC_INLINE directory_entry::operator const filesystem::path&() const noexcept
return _path; return _path;
} }
#ifdef __cpp_exceptions
GHC_INLINE bool directory_entry::exists() const GHC_INLINE bool directory_entry::exists() const
{ {
return filesystem::exists(status()); return filesystem::exists(status());
} }
#endif
GHC_INLINE bool directory_entry::exists(std::error_code& ec) const noexcept GHC_INLINE bool directory_entry::exists(std::error_code& ec) const noexcept
{ {
return filesystem::exists(status(ec)); return filesystem::exists(status(ec));
} }
#ifdef __cpp_exceptions
GHC_INLINE bool directory_entry::is_block_file() const GHC_INLINE bool directory_entry::is_block_file() const
{ {
return filesystem::is_block_file(status()); return filesystem::is_block_file(status());
} }
#endif
GHC_INLINE bool directory_entry::is_block_file(std::error_code& ec) const noexcept GHC_INLINE bool directory_entry::is_block_file(std::error_code& ec) const noexcept
{ {
return filesystem::is_block_file(status(ec)); return filesystem::is_block_file(status(ec));
} }
#ifdef __cpp_exceptions
GHC_INLINE bool directory_entry::is_character_file() const GHC_INLINE bool directory_entry::is_character_file() const
{ {
return filesystem::is_character_file(status()); return filesystem::is_character_file(status());
} }
#endif
GHC_INLINE bool directory_entry::is_character_file(std::error_code& ec) const noexcept GHC_INLINE bool directory_entry::is_character_file(std::error_code& ec) const noexcept
{ {
return filesystem::is_character_file(status(ec)); return filesystem::is_character_file(status(ec));
} }
#ifdef __cpp_exceptions
GHC_INLINE bool directory_entry::is_directory() const GHC_INLINE bool directory_entry::is_directory() const
{ {
return filesystem::is_directory(status()); return filesystem::is_directory(status());
} }
#endif
GHC_INLINE bool directory_entry::is_directory(std::error_code& ec) const noexcept GHC_INLINE bool directory_entry::is_directory(std::error_code& ec) const noexcept
{ {
return filesystem::is_directory(status(ec)); return filesystem::is_directory(status(ec));
} }
#ifdef __cpp_exceptions
GHC_INLINE bool directory_entry::is_fifo() const GHC_INLINE bool directory_entry::is_fifo() const
{ {
return filesystem::is_fifo(status()); return filesystem::is_fifo(status());
} }
#endif
GHC_INLINE bool directory_entry::is_fifo(std::error_code& ec) const noexcept GHC_INLINE bool directory_entry::is_fifo(std::error_code& ec) const noexcept
{ {
return filesystem::is_fifo(status(ec)); return filesystem::is_fifo(status(ec));
} }
#ifdef __cpp_exceptions
GHC_INLINE bool directory_entry::is_other() const GHC_INLINE bool directory_entry::is_other() const
{ {
return filesystem::is_other(status()); return filesystem::is_other(status());
} }
#endif
GHC_INLINE bool directory_entry::is_other(std::error_code& ec) const noexcept GHC_INLINE bool directory_entry::is_other(std::error_code& ec) const noexcept
{ {
return filesystem::is_other(status(ec)); return filesystem::is_other(status(ec));
} }
#ifdef __cpp_exceptions
GHC_INLINE bool directory_entry::is_regular_file() const GHC_INLINE bool directory_entry::is_regular_file() const
{ {
return filesystem::is_regular_file(status()); return filesystem::is_regular_file(status());
} }
#endif
GHC_INLINE bool directory_entry::is_regular_file(std::error_code& ec) const noexcept GHC_INLINE bool directory_entry::is_regular_file(std::error_code& ec) const noexcept
{ {
return filesystem::is_regular_file(status(ec)); return filesystem::is_regular_file(status(ec));
} }
#ifdef __cpp_exceptions
GHC_INLINE bool directory_entry::is_socket() const GHC_INLINE bool directory_entry::is_socket() const
{ {
return filesystem::is_socket(status()); return filesystem::is_socket(status());
} }
#endif
GHC_INLINE bool directory_entry::is_socket(std::error_code& ec) const noexcept GHC_INLINE bool directory_entry::is_socket(std::error_code& ec) const noexcept
{ {
return filesystem::is_socket(status(ec)); return filesystem::is_socket(status(ec));
} }
#ifdef __cpp_exceptions
GHC_INLINE bool directory_entry::is_symlink() const GHC_INLINE bool directory_entry::is_symlink() const
{ {
return filesystem::is_symlink(symlink_status()); return filesystem::is_symlink(symlink_status());
} }
#endif
GHC_INLINE bool directory_entry::is_symlink(std::error_code& ec) const noexcept GHC_INLINE bool directory_entry::is_symlink(std::error_code& ec) const noexcept
{ {
return filesystem::is_symlink(symlink_status(ec)); return filesystem::is_symlink(symlink_status(ec));
} }
#ifdef __cpp_exceptions
GHC_INLINE uintmax_t directory_entry::file_size() const GHC_INLINE uintmax_t directory_entry::file_size() const
{ {
if (_status.type() != file_type::none) { if (_status.type() != file_type::none) {
@ -4711,6 +4908,7 @@ GHC_INLINE uintmax_t directory_entry::file_size() const
} }
return filesystem::file_size(path()); return filesystem::file_size(path());
} }
#endif
GHC_INLINE uintmax_t directory_entry::file_size(std::error_code& ec) const noexcept GHC_INLINE uintmax_t directory_entry::file_size(std::error_code& ec) const noexcept
{ {
@ -4721,6 +4919,7 @@ GHC_INLINE uintmax_t directory_entry::file_size(std::error_code& ec) const noexc
return filesystem::file_size(path(), ec); return filesystem::file_size(path(), ec);
} }
#ifdef __cpp_exceptions
GHC_INLINE uintmax_t directory_entry::hard_link_count() const GHC_INLINE uintmax_t directory_entry::hard_link_count() const
{ {
#ifndef GHC_OS_WINDOWS #ifndef GHC_OS_WINDOWS
@ -4730,6 +4929,7 @@ GHC_INLINE uintmax_t directory_entry::hard_link_count() const
#endif #endif
return filesystem::hard_link_count(path()); return filesystem::hard_link_count(path());
} }
#endif
GHC_INLINE uintmax_t directory_entry::hard_link_count(std::error_code& ec) const noexcept GHC_INLINE uintmax_t directory_entry::hard_link_count(std::error_code& ec) const noexcept
{ {
@ -4742,6 +4942,7 @@ GHC_INLINE uintmax_t directory_entry::hard_link_count(std::error_code& ec) const
return filesystem::hard_link_count(path(), ec); return filesystem::hard_link_count(path(), ec);
} }
#ifdef __cpp_exceptions
GHC_INLINE file_time_type directory_entry::last_write_time() const GHC_INLINE file_time_type directory_entry::last_write_time() const
{ {
if (_status.type() != file_type::none) { if (_status.type() != file_type::none) {
@ -4749,6 +4950,7 @@ GHC_INLINE file_time_type directory_entry::last_write_time() const
} }
return filesystem::last_write_time(path()); return filesystem::last_write_time(path());
} }
#endif
GHC_INLINE file_time_type directory_entry::last_write_time(std::error_code& ec) const noexcept GHC_INLINE file_time_type directory_entry::last_write_time(std::error_code& ec) const noexcept
{ {
@ -4759,6 +4961,7 @@ GHC_INLINE file_time_type directory_entry::last_write_time(std::error_code& ec)
return filesystem::last_write_time(path(), ec); return filesystem::last_write_time(path(), ec);
} }
#ifdef __cpp_exceptions
GHC_INLINE file_status directory_entry::status() const GHC_INLINE file_status directory_entry::status() const
{ {
if (_status.type() != file_type::none) { if (_status.type() != file_type::none) {
@ -4766,6 +4969,7 @@ GHC_INLINE file_status directory_entry::status() const
} }
return filesystem::status(path()); return filesystem::status(path());
} }
#endif
GHC_INLINE file_status directory_entry::status(std::error_code& ec) const noexcept GHC_INLINE file_status directory_entry::status(std::error_code& ec) const noexcept
{ {
@ -4776,6 +4980,7 @@ GHC_INLINE file_status directory_entry::status(std::error_code& ec) const noexce
return filesystem::status(path(), ec); return filesystem::status(path(), ec);
} }
#ifdef __cpp_exceptions
GHC_INLINE file_status directory_entry::symlink_status() const GHC_INLINE file_status directory_entry::symlink_status() const
{ {
if (_symlink_status.type() != file_type::none) { if (_symlink_status.type() != file_type::none) {
@ -4783,6 +4988,7 @@ GHC_INLINE file_status directory_entry::symlink_status() const
} }
return filesystem::symlink_status(path()); return filesystem::symlink_status(path());
} }
#endif
GHC_INLINE file_status directory_entry::symlink_status(std::error_code& ec) const noexcept GHC_INLINE file_status directory_entry::symlink_status(std::error_code& ec) const noexcept
{ {
@ -5113,6 +5319,7 @@ GHC_INLINE recursive_directory_iterator::recursive_directory_iterator() noexcept
_impl->_dir_iter_stack.push(directory_iterator()); _impl->_dir_iter_stack.push(directory_iterator());
} }
#ifdef __cpp_exceptions
GHC_INLINE recursive_directory_iterator::recursive_directory_iterator(const path& p) GHC_INLINE recursive_directory_iterator::recursive_directory_iterator(const path& p)
: _impl(new recursive_directory_iterator_impl(directory_options::none, true)) : _impl(new recursive_directory_iterator_impl(directory_options::none, true))
{ {
@ -5124,6 +5331,7 @@ GHC_INLINE recursive_directory_iterator::recursive_directory_iterator(const path
{ {
_impl->_dir_iter_stack.push(directory_iterator(p, options)); _impl->_dir_iter_stack.push(directory_iterator(p, options));
} }
#endif
GHC_INLINE recursive_directory_iterator::recursive_directory_iterator(const path& p, directory_options options, std::error_code& ec) noexcept GHC_INLINE recursive_directory_iterator::recursive_directory_iterator(const path& p, directory_options options, std::error_code& ec) noexcept
: _impl(new recursive_directory_iterator_impl(options, true)) : _impl(new recursive_directory_iterator_impl(options, true))
@ -5202,7 +5410,11 @@ GHC_INLINE recursive_directory_iterator& recursive_directory_iterator::operator+
GHC_INLINE recursive_directory_iterator& recursive_directory_iterator::increment(std::error_code& ec) noexcept GHC_INLINE recursive_directory_iterator& recursive_directory_iterator::increment(std::error_code& ec) noexcept
{ {
if (recursion_pending() && is_directory((*this)->status()) && (!is_symlink((*this)->symlink_status()) || (options() & directory_options::follow_directory_symlink) != directory_options::none)) { auto status = (*this)->status(ec);
if (ec) return *this;
auto symlink_status = (*this)->symlink_status(ec);
if (ec) return *this;
if (recursion_pending() && is_directory(status) && (!is_symlink(symlink_status) || (options() & directory_options::follow_directory_symlink) != directory_options::none)) {
_impl->_dir_iter_stack.push(directory_iterator((*this)->path(), _impl->_options, ec)); _impl->_dir_iter_stack.push(directory_iterator((*this)->path(), _impl->_options, ec));
} }
else { else {