Sfoglia il codice sorgente

Merge pull request #8 from vapourismo/gcc-4.8.4-tables

Hint which types are being constructed to the compiler
Ole 9 anni fa
parent
commit
e358dc7c43
1 ha cambiato i file con 31 aggiunte e 6 eliminazioni
  1. 31 6
      lib/luwra/tables.hpp

+ 31 - 6
lib/luwra/tables.hpp

@@ -74,18 +74,25 @@ struct Value<internal::Path<P, K>> {
 	}
 };
 
+struct Table;
+
 namespace internal {
 	template <typename A>
-	struct TableAccessor {
+	class TableAccessor {
+	public:
 		State* state;
 		A accessor;
 
-		TableAccessor(const TableAccessor&) = delete;
-		TableAccessor(TableAccessor&&) = delete;
+	private:
+		TableAccessor(const TableAccessor&) = default;
+		TableAccessor(TableAccessor&&) = default;
 
 		TableAccessor& operator =(const TableAccessor&) = delete;
 		TableAccessor& operator =(TableAccessor&&) = delete;
 
+		friend struct luwra::Table;
+
+	public:
 		template <typename V> inline
 		V read() const && {
 			return accessor.template read<V>(state);
@@ -110,7 +117,13 @@ namespace internal {
 
 		template <typename K> inline
 		TableAccessor<Path<A, K>> access(K&& subkey) const && {
-			return {state, {accessor, std::forward<K>(subkey)}};
+			return TableAccessor<Path<A, K>> {
+				state,
+				Path<A, K> {
+					accessor,
+					std::forward<K>(subkey)
+				}
+			};
 		}
 
 		template <typename K> inline
@@ -143,12 +156,24 @@ struct Table {
 
 	template <typename K> inline
 	internal::TableAccessor<internal::Path<const Reference&, K>> access(K&& key) const {
-		return {ref.impl->state, {ref, std::forward<K>(key)}};
+		return internal::TableAccessor<internal::Path<const Reference&, K>> {
+			ref.impl->state,
+			internal::Path<const Reference&, K> {
+				ref,
+				std::forward<K>(key)
+			}
+		};
 	}
 
 	template <typename K> inline
 	internal::TableAccessor<internal::Path<const Reference&, K>> operator [](K&& key) const {
-		return {ref.impl->state, {ref, std::forward<K>(key)}};
+		return internal::TableAccessor<internal::Path<const Reference&, K>> {
+			ref.impl->state,
+			internal::Path<const Reference&, K> {
+				ref,
+				std::forward<K>(key)
+			}
+		};
 	}
 
 	inline