|  | // RUN: rm -rf %t | 
|  | // RUN: %clang_cc1 -std=c++11 -nostdsysteminc -I%S/Inputs/PR28812 -verify %s | 
|  | // RUN: %clang_cc1 -std=c++11 -nostdsysteminc -fmodules -fimplicit-module-maps \ | 
|  | // RUN:            -fmodules-cache-path=%t -I%S/Inputs/PR28812 -verify %s | 
|  |  | 
|  | template <typename> struct VarStreamArrayIterator; | 
|  | template <typename ValueType> | 
|  | struct VarStreamArray { | 
|  | typedef VarStreamArrayIterator<ValueType> Iterator; | 
|  | Iterator begin() { return Iterator(*this); } | 
|  | }; | 
|  |  | 
|  | #include "Textual.h" | 
|  |  | 
|  | #include "a.h" | 
|  | #include "b.h" | 
|  |  | 
|  | VarStreamArray<int> a; | 
|  | auto b = a.begin(); | 
|  |  | 
|  | // expected-no-diagnostics | 
|  |  |