std::filesystem::path::replace_extension
| path& replace_extension( const path& replacement = path() ); | (1) | (since C++17) | 
Replaces the extension with replacement or removes it when the default value of replacement is used.
Firstly, if this path has an extension(), it is removed from the generic-format view of the pathname.
Then, a dot character is appended to the generic-format view of the pathname, if replacement is not empty or does not begin with a dot character.
Then replacement is appended as if by operator+=(replacement).
Parameters
| replacement | - | the extension to replace with | 
Return value
*this.
Exceptions
(none).
Notes
The type of replacement is std::filesystem::path even though it is not intended to represent an object on the file system in order to correctly account for the filesystem character encoding.
Example
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
 
int main()
{
    fs::path p = "/foo/bar.jpeg";
    std::cout << "Was: " << p << '\n';
    p.replace_extension(".jpg");
    std::cout << "Now: " << p << '\n';
}Output:
Was: "/foo/bar.jpeg" Now: "/foo/bar.jpg"
See also
| returns the file extension path component (public member function) | |
| returns the filename path component (public member function) | |
| returns the stem path component (public member function) | |
| checks if the corresponding path element is not empty (public member function) | 
    © cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
    http://en.cppreference.com/w/cpp/filesystem/path/replace_extension