The following code example is taken from the book
 
  C++17 - The Complete Guide
 by Nicolai M. Josuttis,
 Leanpub, 2017 
 
 The code is licensed under a
 
     Creative Commons Attribution 4.0 International License.
     
 
 
// raw code
 
#include <vector> 
#include <iostream> 
#include <numeric>     // for transform_reduce()  
#include <execution>   // for the execution policy  
#include <filesystem>  // filesystem library  
#include <cstdlib>     // for EXIT_FAILURE  
 
int main(int argc, char* argv[]) 
{ 
  // root directory is passed as command line argument:  
  if (argc < 2) { 
    std::cout << "Usage: " << argv[0] << " <path> \n"; 
    return EXIT_FAILURE; 
  } 
  std::filesystem::path root{argv[1]}; 
 
  // init list of all file paths in passed file tree:  
  std::vector<std::filesystem::path> paths; 
  try { 
    std::filesystem::recursive_directory_iterator dirpos{root}; 
    std::copy(begin(dirpos), end(dirpos), 
              std::back_inserter(paths)); 
  } 
  catch (const std::exception& e) { 
    std::cerr << "EXCEPTION: " << e.what() << std::endl; 
    return EXIT_FAILURE; 
  } 
 
  // accumulate size of all regular files:  
  auto sz = std::transform_reduce( 
                   std::execution::par,                 // parallel execution  
                   paths.cbegin(), paths.cend(),        // range  
                   std::uintmax_t{0},                   // initial value  
                   std::plus<>(),                       // accumulate ...  
                   [](const std::filesystem::path& p) { //  file size if regular file  
                     return is_regular_file(p) ? file_size(p) 
                                               : std::uintmax_t{0}; 
                   });  
  std::cout << "size of all " << paths.size() 
            << " regular files: " << sz << '\n'; 
}