/*
- * Copyright 2014 Facebook, Inc.
+ * Copyright 2015 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
public:
static_assert(!std::is_reference<Value>::value,
"Optional may not be used with reference types");
+ static_assert(!std::is_abstract<Value>::value,
+ "Optional may not be used with abstract types");
Optional()
: hasValue_(false) {
}
template<class V>
-bool operator==(const V& a, const Optional<V&> b) {
+bool operator==(const V& a, const Optional<V>& b) {
return b.hasValue() && b.value() == a;
}
return !(a < b);
}
-// To supress comparability of Optional<T> with T, despite implicit conversion.
+// Suppress comparability of Optional<T> with T, despite implicit conversion.
template<class V> bool operator< (const Optional<V>&, const V& other) = delete;
template<class V> bool operator<=(const Optional<V>&, const V& other) = delete;
template<class V> bool operator>=(const Optional<V>&, const V& other) = delete;