Blob Blame History Raw

fixed error: missing 'typename' prior to dependent type name

diff -up chromium-122.0.6261.69/base/containers/map_util.h.typename chromium-122.0.6261.69/base/containers/map_util.h
--- chromium-122.0.6261.69/base/containers/map_util.h.typename	2024-02-22 22:42:43.000000000 +0100
+++ chromium-122.0.6261.69/base/containers/map_util.h	2024-02-24 15:05:00.882592705 +0100
@@ -42,7 +42,7 @@ constexpr internal::MappedType<Map>* Fin
 template <typename Map,
           typename Key,
           typename MappedElementType =
-              std::pointer_traits<internal::MappedType<Map>>::element_type>
+              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
 constexpr const MappedElementType* FindPtrOrNull(const Map& map,
                                                  const Key& key) {
   auto it = map.find(key);
@@ -58,7 +58,7 @@ constexpr const MappedElementType* FindP
 template <typename Map,
           typename Key,
           typename MappedElementType =
-              std::pointer_traits<internal::MappedType<Map>>::element_type>
+              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
 constexpr MappedElementType* FindPtrOrNull(Map& map, const Key& key) {
   auto it = map.find(key);
   return it != map.end() ? std::to_address(it->second) : nullptr;
diff -up chromium-122.0.6261.69/base/functional/bind_internal.h.typename chromium-122.0.6261.69/base/functional/bind_internal.h
--- chromium-122.0.6261.69/base/functional/bind_internal.h.typename	2024-02-24 15:05:00.883592724 +0100
+++ chromium-122.0.6261.69/base/functional/bind_internal.h	2024-02-24 15:13:49.755223533 +0100
@@ -1400,11 +1400,11 @@ template <int i,
           typename Param>
 struct ParamCanBeBound {
  private:
-  using UnwrappedParam = BindArgument<i>::template ForwardedAs<
+  using UnwrappedParam = typename BindArgument<i>::template ForwardedAs<
       Unwrapped>::template ToParamWithType<Param>;
-  using ParamStorage = BindArgument<i>::template ToParamWithType<
+  using ParamStorage = typename BindArgument<i>::template ToParamWithType<
       Param>::template StoredAs<Storage>;
-  using BoundStorage =
+  using BoundStorage = typename
       BindArgument<i>::template BoundAs<Arg>::template StoredAs<Storage>;
 
   template <bool v = !UnwrappedParam::kRawPtr ||
diff -up chromium-122.0.6261.69/chrome/browser/download/bubble/download_bubble_update_service.cc.typename chromium-122.0.6261.69/chrome/browser/download/bubble/download_bubble_update_service.cc
--- chromium-122.0.6261.69/chrome/browser/download/bubble/download_bubble_update_service.cc.typename	2024-02-22 22:42:50.000000000 +0100
+++ chromium-122.0.6261.69/chrome/browser/download/bubble/download_bubble_update_service.cc	2024-02-24 15:05:00.882592705 +0100
@@ -90,7 +90,7 @@ ItemSortKey GetSortKey(const Item& item)
 // Helper to get an iterator to the last element in the cache. The cache
 // must not be empty.
 template <typename Item>
-SortedItems<Item>::const_iterator GetLastIter(const SortedItems<Item>& cache) {
+typename SortedItems<Item>::const_iterator GetLastIter(const SortedItems<Item>& cache) {
   CHECK(!cache.empty());
   auto it = cache.end();
   return std::prev(it);
@@ -1090,9 +1090,9 @@ bool DownloadBubbleUpdateService::CacheM
 }
 
 template <typename Id, typename Item>
-SortedItems<Item>::iterator
+typename SortedItems<Item>::iterator
 DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheByIter(
-    SortedItems<Item>::iterator iter,
+    typename SortedItems<Item>::iterator iter,
     SortedItems<Item>& cache,
     IterMap<Id, Item>& iter_map) {
   CHECK(iter != cache.end());
diff -up chromium-122.0.6261.69/components/optimization_guide/core/model_execution/model_execution_util.h.typename chromium-122.0.6261.69/components/optimization_guide/core/model_execution/model_execution_util.h
--- chromium-122.0.6261.69/components/optimization_guide/core/model_execution/model_execution_util.h.typename	2024-02-22 22:43:01.000000000 +0100
+++ chromium-122.0.6261.69/components/optimization_guide/core/model_execution/model_execution_util.h	2024-02-24 15:05:00.884592742 +0100
@@ -25,7 +25,7 @@ void SetExecutionRequestTemplate(
 
   // Request is set by the feature and should always be typed.
   auto typed_request =
-      static_cast<const FeatureType::Request&>(request_metadata);
+      static_cast<const typename FeatureType::Request&>(request_metadata);
   *(logging_data->mutable_request_data()) = typed_request;
 }
 
diff -up chromium-122.0.6261.69/components/optimization_guide/core/model_quality/model_quality_log_entry.h.typename chromium-122.0.6261.69/components/optimization_guide/core/model_quality/model_quality_log_entry.h
--- chromium-122.0.6261.69/components/optimization_guide/core/model_quality/model_quality_log_entry.h.typename	2024-02-22 22:43:01.000000000 +0100
+++ chromium-122.0.6261.69/components/optimization_guide/core/model_quality/model_quality_log_entry.h	2024-02-24 15:05:00.884592742 +0100
@@ -29,7 +29,7 @@ class ModelQualityLogEntry {
   }
 
   template <typename FeatureType>
-  FeatureType::Quality* quality_data() {
+  typename FeatureType::Quality* quality_data() {
     return FeatureType::GetLoggingData(*log_ai_data_request_)
         ->mutable_quality_data();
   }
diff -up chromium-122.0.6261.69/components/optimization_guide/core/tflite_model_executor.h.typename chromium-122.0.6261.69/components/optimization_guide/core/tflite_model_executor.h
--- chromium-122.0.6261.69/components/optimization_guide/core/tflite_model_executor.h.typename	2024-02-22 22:43:01.000000000 +0100
+++ chromium-122.0.6261.69/components/optimization_guide/core/tflite_model_executor.h	2024-02-24 15:05:00.883592724 +0100
@@ -241,7 +241,7 @@ class TFLiteModelExecutor : public Model
   void SendForBatchExecution(
       BatchExecutionCallback callback_on_complete,
       base::TimeTicks start_time,
-      ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs)
+      typename ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs)
       override {
     DCHECK(execution_task_runner_->RunsTasksInCurrentSequence());
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -263,7 +263,7 @@ class TFLiteModelExecutor : public Model
   // Starts the synchronous execution of the model. Returns model outputs.
   // Model needs to be loaded. Synchronous calls do not load or unload model.
   std::vector<absl::optional<OutputType>> SendForBatchExecutionSync(
-      ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs)
+      typename ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs)
       override {
     DCHECK(execution_task_runner_->RunsTasksInCurrentSequence());
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -421,7 +421,7 @@ class TFLiteModelExecutor : public Model
   // executes it on the model execution thread.
   void LoadModelFileAndBatchExecute(
       BatchExecutionCallback callback_on_complete,
-      ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs) {
+      typename ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs) {
     DCHECK(execution_task_runner_->RunsTasksInCurrentSequence());
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
@@ -438,7 +438,7 @@ class TFLiteModelExecutor : public Model
 
   // Batch executes the loaded model for inputs.
   void BatchExecuteLoadedModel(
-      ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs,
+      typename ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs,
       std::vector<absl::optional<OutputType>>* outputs) {
     DCHECK(execution_task_runner_->RunsTasksInCurrentSequence());
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -498,7 +498,7 @@ class TFLiteModelExecutor : public Model
   // Unloads the model if needed.
   void BatchExecuteLoadedModelAndRunCallback(
       BatchExecutionCallback callback_on_complete,
-      ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs,
+      typename ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs,
       ExecutionStatus execution_status) {
     DCHECK(execution_task_runner_->RunsTasksInCurrentSequence());
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
diff -up chromium-122.0.6261.69/components/supervised_user/core/browser/proto_fetcher.h.typename chromium-122.0.6261.69/components/supervised_user/core/browser/proto_fetcher.h
diff -up chromium-122.0.6261.69/mojo/public/cpp/bindings/array_traits.h.typename chromium-122.0.6261.69/mojo/public/cpp/bindings/array_traits.h
--- chromium-122.0.6261.69/mojo/public/cpp/bindings/array_traits.h.typename	2024-02-22 22:43:15.000000000 +0100
+++ chromium-122.0.6261.69/mojo/public/cpp/bindings/array_traits.h	2024-02-24 15:05:00.884592742 +0100
@@ -90,7 +90,7 @@ template <typename Container>
     { c[i] } -> std::same_as<typename Container::reference>;
   }
 struct ArrayTraits<Container> {
-  using Element = Container::value_type;
+  using Element = typename Container::value_type;
 
   // vector-like containers have no built-in null.
   static bool IsNull(const Container& c) { return false; }
diff -up chromium-122.0.6261.69/third_party/blink/renderer/bindings/core/v8/async_iterable.h.typename chromium-122.0.6261.69/third_party/blink/renderer/bindings/core/v8/async_iterable.h
--- chromium-122.0.6261.69/third_party/blink/renderer/bindings/core/v8/async_iterable.h.typename	2024-02-22 22:43:20.000000000 +0100
+++ chromium-122.0.6261.69/third_party/blink/renderer/bindings/core/v8/async_iterable.h	2024-02-24 15:05:00.883592724 +0100
@@ -218,7 +218,7 @@ class PairAsyncIterable {
  private:
   virtual IterationSource* CreateIterationSource(
       ScriptState* script_state,
-      IterationSource::Kind kind,
+      typename IterationSource::Kind kind,
       ExceptionState& exception_state) = 0;
 };
 
@@ -260,7 +260,7 @@ class ValueAsyncIterable {
  private:
   virtual IterationSource* CreateIterationSource(
       ScriptState* script_state,
-      IterationSource::Kind kind,
+      typename IterationSource::Kind kind,
       ExceptionState& exception_state) = 0;
 };
 
diff -up chromium-122.0.6261.69/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc.typename chromium-122.0.6261.69/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc
--- chromium-122.0.6261.69/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc.typename	2024-02-24 15:05:00.882592705 +0100
+++ chromium-122.0.6261.69/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc	2024-02-24 15:12:27.742724849 +0100
@@ -211,7 +211,7 @@ class HTMLFastPathParser {
   using Span = base::span<const Char>;
   using USpan = base::span<const UChar>;
   // 32 matches that used by HTMLToken::Attribute.
-  typedef std::conditional<std::is_same_v<Char, UChar>,
+  typedef typename std::conditional<std::is_same_v<Char, UChar>,
                            UCharLiteralBuffer<32>,
                            LCharLiteralBuffer<32>>::type LiteralBufferType;
   static_assert(std::is_same_v<Char, UChar> || std::is_same_v<Char, LChar>);
diff -up chromium-122.0.6261.69/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h.typename chromium-122.0.6261.69/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h
--- chromium-122.0.6261.69/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h.typename	2024-02-22 22:43:21.000000000 +0100
+++ chromium-122.0.6261.69/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h	2024-02-24 15:05:00.883592724 +0100
@@ -272,8 +272,8 @@ class CORE_EXPORT ObjectPaintPropertiesS
       NodeList& nodes,
       NodeId node_id,
       const ParentType& parent,
-      NodeType::State&& state,
-      const NodeType::AnimationState& animation_state =
+      typename NodeType::State&& state,
+      const typename NodeType::AnimationState& animation_state =
           NodeType::AnimationState()) {
     // First, check if we need to add a new node.
     if (!nodes.HasField(node_id)) {
diff -up chromium-122.0.6261.69/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.h.me chromium-122.0.6261.69/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.h
--- chromium-122.0.6261.69/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.h.me	2024-02-24 16:51:41.292310554 +0100
+++ chromium-122.0.6261.69/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.h	2024-02-24 16:52:10.022896063 +0100
@@ -26,7 +26,7 @@ PartitionRoot& InternalAllocatorRoot();
 
 // A class that meets C++ named requirements, Allocator.
 template <typename T>
-InternalAllocator<T>::value_type* InternalAllocator<T>::allocate(
+typename InternalAllocator<T>::value_type* InternalAllocator<T>::allocate(
     std::size_t count) {
   PA_CHECK(count <=
            std::numeric_limits<std::size_t>::max() / sizeof(value_type));
diff -up chromium-122.0.6261.69/base/functional/function_ref.h.me chromium-122.0.6261.69/base/functional/function_ref.h
--- chromium-122.0.6261.69/base/functional/function_ref.h.me	2024-02-24 17:59:35.119582549 +0100
+++ chromium-122.0.6261.69/base/functional/function_ref.h	2024-02-24 18:00:27.107938399 +0100
@@ -64,7 +64,7 @@ class FunctionRef;
 template <typename R, typename... Args>
 class FunctionRef<R(Args...)> {
   template <typename Functor,
-            typename RunType = internal::MakeFunctorTraits<Functor>::RunType>
+            typename RunType = typename internal::MakeFunctorTraits<Functor>::RunType>
   static constexpr bool kCompatibleFunctor =
       std::convertible_to<internal::ExtractReturnType<RunType>, R> &&
       std::same_as<internal::ExtractArgs<RunType>, internal::TypeList<Args...>>;
diff -up chromium-122.0.6261.69/base/containers/heap_array.h.me chromium-122.0.6261.69/base/containers/heap_array.h
--- chromium-122.0.6261.69/base/containers/heap_array.h.me	2024-02-24 18:02:34.463921568 +0100
+++ chromium-122.0.6261.69/base/containers/heap_array.h	2024-02-24 18:04:01.922850571 +0100
@@ -32,8 +32,8 @@ class TRIVIAL_ABI GSL_OWNER HeapArray {
   static_assert(!std::is_reference_v<T>,
                 "HeapArray cannot hold reference types");
 
-  using iterator = base::span<T>::iterator;
-  using const_iterator = base::span<const T>::iterator;
+  using iterator = typename base::span<T>::iterator;
+  using const_iterator = typename base::span<const T>::iterator;
 
   // Allocates initialized memory capable of holding `size` elements. No memory
   // is allocated for zero-sized arrays.
diff -up chromium-122.0.6261.69/mojo/public/cpp/bindings/type_converter.h.me chromium-122.0.6261.69/mojo/public/cpp/bindings/type_converter.h
--- chromium-122.0.6261.69/mojo/public/cpp/bindings/type_converter.h.me	2024-02-24 18:51:06.957087464 +0100
+++ chromium-122.0.6261.69/mojo/public/cpp/bindings/type_converter.h	2024-02-24 18:51:27.778488490 +0100
@@ -125,7 +125,7 @@ using VecValueType = typename Vec::value
 
 template <typename Vec>
 using VecPtrLikeUnderlyingValueType =
-    std::pointer_traits<VecValueType<Vec>>::element_type;
+    typename std::pointer_traits<VecValueType<Vec>>::element_type;
 
 }  // namespace internal
 
diff -up chromium-122.0.6261.69/third_party/blink/renderer/platform/wtf/hash_table.h.me chromium-122.0.6261.69/third_party/blink/renderer/platform/wtf/hash_table.h
--- chromium-122.0.6261.69/third_party/blink/renderer/platform/wtf/hash_table.h.me	2024-02-24 19:45:13.620934215 +0100
+++ chromium-122.0.6261.69/third_party/blink/renderer/platform/wtf/hash_table.h	2024-02-24 19:46:08.817940962 +0100
@@ -2005,7 +2005,7 @@ struct HashTableConstIteratorAdapter {
   static_assert(!IsTraceable<typename Traits::TraitType>::value);
 
   using iterator_category = std::bidirectional_iterator_tag;
-  using value_type = HashTableType::ValueType;
+  using value_type = typename HashTableType::ValueType;
   using difference_type = ptrdiff_t;
   using pointer = value_type*;
   using reference = value_type&;
@@ -2057,7 +2057,7 @@ struct HashTableConstIteratorAdapter<
 
  public:
   using iterator_category = std::bidirectional_iterator_tag;
-  using value_type = HashTableType::ValueType;
+  using value_type = typename HashTableType::ValueType;
   using difference_type = ptrdiff_t;
   using pointer = value_type*;
   using reference = value_type&;
@@ -2111,7 +2111,7 @@ struct HashTableIteratorAdapter {
   static_assert(!IsTraceable<typename Traits::TraitType>::value);
 
   using iterator_category = std::bidirectional_iterator_tag;
-  using value_type = HashTableType::ValueType;
+  using value_type = typename HashTableType::ValueType;
   using difference_type = ptrdiff_t;
   using pointer = value_type*;
   using reference = value_type&;
@@ -2159,7 +2159,7 @@ struct HashTableIteratorAdapter<
 
  public:
   using iterator_category = std::bidirectional_iterator_tag;
-  using value_type = HashTableType::ValueType;
+  using value_type = typename HashTableType::ValueType;
   using difference_type = ptrdiff_t;
   using pointer = value_type*;
   using reference = value_type&;
diff -up chromium-122.0.6261.69/base/types/fixed_array.h.me chromium-122.0.6261.69/base/types/fixed_array.h
--- chromium-122.0.6261.69/base/types/fixed_array.h.me	2024-02-25 11:22:59.819590529 +0100
+++ chromium-122.0.6261.69/base/types/fixed_array.h	2024-02-25 11:24:12.424953031 +0100
@@ -27,8 +27,8 @@ template <typename T,
 class FixedArray : public absl::FixedArray<T, N, A> {
  public:
   using absl::FixedArray<T, N, A>::FixedArray;
-  explicit FixedArray(absl::FixedArray<T, N, A>::size_type n,
-                      const absl::FixedArray<T, N, A>::allocator_type& a =
+  explicit FixedArray(typename absl::FixedArray<T, N, A>::size_type n,
+                      const typename absl::FixedArray<T, N, A>::allocator_type& a =
                           typename absl::FixedArray<T, N, A>::allocator_type())
       : FixedArray(n, T(), a) {}
 };
diff -up chromium-122.0.6261.69/chrome/browser/web_applications/commands/internal/command_internal.h.me chromium-122.0.6261.69/chrome/browser/web_applications/commands/internal/command_internal.h
--- chromium-122.0.6261.69/chrome/browser/web_applications/commands/internal/command_internal.h.me	2024-02-25 15:04:56.775897713 +0100
+++ chromium-122.0.6261.69/chrome/browser/web_applications/commands/internal/command_internal.h	2024-02-25 15:05:34.884579279 +0100
@@ -121,7 +121,7 @@ class CommandBase {
 template <typename LockType>
 class CommandWithLock : public CommandBase {
  public:
-  using LockDescription = LockType::LockDescription;
+  using LockDescription = typename LockType::LockDescription;
   explicit CommandWithLock(const std::string& name,
                            LockDescription initial_lock_request);
 
diff -up chromium-122.0.6261.69/chrome/browser/web_applications/commands/web_app_command.h.me chromium-122.0.6261.69/chrome/browser/web_applications/commands/web_app_command.h
--- chromium-122.0.6261.69/chrome/browser/web_applications/commands/web_app_command.h.me	2024-02-25 15:05:46.885793828 +0100
+++ chromium-122.0.6261.69/chrome/browser/web_applications/commands/web_app_command.h	2024-02-25 15:06:12.334248725 +0100
@@ -106,7 +106,7 @@ class WebAppLockManager;
 template <typename LockType, typename... CallbackArgs>
 class WebAppCommand : public internal::CommandWithLock<LockType> {
  public:
-  using LockDescription = LockType::LockDescription;
+  using LockDescription = typename LockType::LockDescription;
   using CallbackType = base::OnceCallback<void(CallbackArgs...)>;
   using ShutdownArgumentsTuple = std::tuple<std::decay_t<CallbackArgs>...>;
 
diff -up chromium-122.0.6261.69/chrome/browser/web_applications/web_app_command_scheduler.h.me chromium-122.0.6261.69/chrome/browser/web_applications/web_app_command_scheduler.h
--- chromium-122.0.6261.69/chrome/browser/web_applications/web_app_command_scheduler.h.me	2024-02-25 15:06:17.896348149 +0100
+++ chromium-122.0.6261.69/chrome/browser/web_applications/web_app_command_scheduler.h	2024-02-25 15:06:58.841076746 +0100
@@ -355,7 +355,7 @@ class WebAppCommandScheduler {
   // command system.
   template <typename LockType>
   void ScheduleCallback(const std::string& operation_name,
-                        LockType::LockDescription lock_description,
+                        typename LockType::LockDescription lock_description,
                         CallbackCommand<LockType, void> callback,
                         base::OnceClosure on_complete,
                         const base::Location& location = FROM_HERE) {
@@ -373,7 +373,7 @@ class WebAppCommandScheduler {
             typename CallbackReturnValue = std::decay_t<CompletionCallbackArg>>
   void ScheduleCallbackWithResult(
       const std::string& operation_name,
-      LockType::LockDescription lock_description,
+      typename LockType::LockDescription lock_description,
       CallbackCommand<LockType, CallbackReturnValue> callback,
       base::OnceCallback<void(CompletionCallbackArg)> on_complete,
       CallbackReturnValue arg_for_shutdown,
diff -up chromium-122.0.6261.69/components/supervised_user/core/browser/proto_fetcher.h.me chromium-122.0.6261.69/components/supervised_user/core/browser/proto_fetcher.h
--- chromium-122.0.6261.69/components/supervised_user/core/browser/proto_fetcher.h.me	2024-02-25 15:12:53.835409392 +0100
+++ chromium-122.0.6261.69/components/supervised_user/core/browser/proto_fetcher.h	2024-02-25 15:16:03.171931033 +0100
@@ -424,7 +424,7 @@ class RetryingFetcherImpl final : public
   RetryingFetcherImpl(const RetryingFetcherImpl&) = delete;
   RetryingFetcherImpl& operator=(const RetryingFetcherImpl&) = delete;
 
-  void Start(ProtoFetcher<Response>::Callback callback) override {
+  void Start(typename ProtoFetcher<Response>::Callback callback) override {
     callback_ = std::move(callback);
     Retry();
   }
@@ -469,7 +469,7 @@ class RetryingFetcherImpl final : public
   }
 
   // Client callback.
-  TypedProtoFetcher<Response>::Callback callback_;
+  typename TypedProtoFetcher<Response>::Callback callback_;
 
   // Retry controls.
   base::OneShotTimer timer_;
@@ -490,7 +490,7 @@ class ParallelFetchManager {
   // Deferred fetcher is required because it should be started after it is
   // stored internally.
   using Fetcher = ProtoFetcher<Response>;
-  using KeyType = base::IDMap<std::unique_ptr<Fetcher>>::KeyType;
+  using KeyType = typename base::IDMap<std::unique_ptr<Fetcher>>::KeyType;
 
  public:
   // Provides fresh instances of a deferred fetcher for each fetch.
@@ -506,7 +506,7 @@ class ParallelFetchManager {
 
   // Starts the fetch. Underlying fetcher is stored internally, and will be
   // cleaned up after finish or when this manager is destroyed.
-  void Fetch(const Request& request, Fetcher::Callback callback) {
+  void Fetch(const Request& request, typename Fetcher::Callback callback) {
     CHECK(callback) << "Use base::DoNothing() instead of empty callback.";
     KeyType key = requests_in_flight_.Add(MakeFetcher(request));
     requests_in_flight_.Lookup(key)->Start(