Нет, вы не можете. Одна из причин, по которой предлагается std::launder
, заключается в том, что std::optional
не реализуемо в C ++ 14. Вы можете обратиться к этому обсуждению для деталей.
С другой стороны, вы можете реализовать один без constexpr
. Идея состоит в том, чтобы использовать буфер с reinterpret_cast
, потому что результат reinterpret_cast
всегда будет ссылаться на вновь созданный объект (в C ++ 17 std::launder
все еще требуется, но в C ++ 14 это нормально). Например,
template
struct FakeOptional {
FakeOptional(){}
template
void emplace(Args&&... args){
new(&storage) T{std::forward(args)...};
}
void reset(){
reinterpret_cast(&storage)->~T();
}
operator bool() const {
return true;
}
const T* operator->() const {
return reinterpret_cast(&storage);
}
T* operator->() {
return reinterpret_cast(&storage);
}
std::aligned_storage_t storage;
};
Реализация boost::optional
использует эту идею и не реализует constexpr
семантику (вы можете обратиться к его исходному коду для подробности).
Вам нужны Бета фьючерсы MVC ASP.NET, который является отдельной загрузкой
затем Ваш исходный код будет работать как прежде.
См. это сообщение для получения его работа: ТАК отправляют на недостающих расширениях
Microsoft.Web.Mvc
блок предоставляет дополнительные методы HtmlHelper
которые позволяют что-то как
<%= Html.ActionLink<SomeController>(c => c.Index()) %>