/*
- * Copyright 2013 Facebook, Inc.
+ * Copyright 2016 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#ifndef FOLLY_LAZY_H_
-#define FOLLY_LAZY_H_
+
+#pragma once
#include <utility>
#include <type_traits>
-#include "folly/Optional.h"
+#include <folly/Optional.h>
namespace folly {
* The value is created using folly::lazy, usually with a lambda, and
* its value is requested using operator().
*
- * Note that the value is not safe for current accesses by multiple
- * threads, even if you declare it const.
+ * Note that the value is not safe for concurrent accesses by multiple
+ * threads, even if you declare it const. See note below.
*
*
* Example Usage:
* value unnecessarily. Sharing with mutable lazies would also
* leave them with non-value semantics despite looking
* value-like.
+ *
+ * - Not thread safe for const accesses. Many use cases for lazy
+ * values are local variables on the stack, where multiple
+ * threads shouldn't even be able to reach the value. It still
+ * is useful to indicate/check that the value doesn't change with
+ * const, particularly when it is captured by a large family of
+ * lambdas. Adding internal synchronization seems like it would
+ * pessimize the most common use case in favor of less likely use
+ * cases.
+ *
*/
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
}
-
-#endif