void copy(const path& from, const path& to);
void copy(const path& from, const path& to, error_code& ec);
void copy(const path& from, const path& to, copy_options options);
void copy(const path& from, const path& to, copy_options options,
error_code& ec);
(options & copy_options::create_symlinks) != copy_options::none || (options & copy_options::skip_symlinks) != copy_options::nonethen auto f = symlink_status(from) and if needed auto t = symlink_status(to).
(options & copy_options::copy_symlinks) != copy_options::nonethen auto f = symlink_status(from) and if needed auto t = status(to).
!exists(t) && (options & copy_options::copy_symlinks) != copy_options::nonethen copy_symlink(from, to).
is_directory(f) && (options & copy_options::create_symlinks) != copy_options::nonethen report an error with an error_code argument equal to make_error_code(errc::is_a_directory).
is_directory(f) && ((options & copy_options::recursive) != copy_options::none || options == copy_options::none)then:
for (const directory_entry& x : directory_iterator(from)) copy(x.path(), to/x.path().filename(), options | copy_options::in-recursive-copy);where in-recursive-copy is a bitmask element of copy_options that is not one of the elements in [fs.enum.copy.opts].
/dir1 file1 file2 dir2 file3
/dir1 file1 file2 dir2 file3 /dir3 file1 file2
/dir1 file1 file2 dir2 file3 /dir3 file1 file2 dir2 file3