【发布时间】:2016-04-20 08:48:33
【问题描述】:
以下模板方法可以声明noexcept吗?
template <typename T>
std::optional<T> foo(const T& value) // noexcept?
{
try {
// code possibly returning a T or a std::nullopt
} catch(...) {
return std::nullopt;
}
}
template <typename T>
boost::optional<T> bar(const T& value) // noexcept?
{
try {
// code possibly returning a T or a boost::none
} catch(...) {
return boost::none;
}
}
换句话说,未初始化的std/boost::optional (nullopt/none) 可以抛出吗?
【问题讨论】:
-
不确定我是否遵循了这个问题。如果您尝试通过
value()提取它的值,则会抛出未初始化的可选项。 -
当然可以,但是可以构造未初始化的可选 throw(即问题中的函数可以声明为
noexcept)吗? -
optional的默认构造函数是noexcept。这是你的问题吗? -
是的...这样说会更好!你有参考资料吗?
-
带有一个不会重新抛出的
try-catch块,无论如何你都可以声明函数noexcept,对吧? stackoverflow.com/a/28975065/27678
标签: c++ optional noexcept boost-optional