C++17 の std::optional に無効値を設定する

C++17 では Boost.Optional が新しく標準ライブラリ入りしました。 Boost.Optional で無効値を指定する場合は boost::none を使っていたんですが、標準ライブラリの std::optional では std::nullopt を使用して無効値を指定します。

[ソースコード]

#include <optional>
#include <iostream>

template<typename T>
void
print(std::optional<T> const& op){
    if( op ){
        std::cout << "OK:" << * op << std::endl;
    }
    else{
        std::cout << "NG" << std::endl;
    }
}

int
main(){
    std::optional<int> value;
    print(value);

    value = 42;
    print(value);

    value = std::nullopt;
    print(value);

    return 0;;
}

[出力]

NG
OK:42
NG

nullptrnullopt が似ていてややこしい。。。