#include <iostream> #include <vector> #include <experimental/optional> std::experimental::optional<int> getFirst(const std::vector<int>& vec){ if ( !vec.empty() ) return std::experimental::optional<int>(vec[0]); else return std::experimental::optional<int>(); } int main(){ std::vector<int> myVec{1,2,3}; std::vector<int> myEmptyVec; auto myInt= getFirst(myVec); if (myInt){ std::cout << "*myInt: " << *myInt << std::endl; std::cout << "myInt.value(): " << myInt.value() << std::endl; std::cout << "myInt.value_or(2017):" << myInt.value_or(2017) << std::endl; } std::cout << std::endl; std::experimental::optional<int> myEmptyInt= getFirst(myEmptyVec); if (!myEmptyInt){ std::cout << "myEmptyInt.value_or(2017):" << myEmptyInt.value_or(2017) << std::endl; } }