| 
					
				 | 
			
			
				@@ -0,0 +1,43 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifndef QLOW_SEM_CAST_H 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define QLOW_SEM_CAST_H 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <memory> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+namespace qlow 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    namespace sem 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // forward declaration 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        class Type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        class Cast; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class qlow::sem::Cast 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    std::shared_ptr<Type> from; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    std::shared_ptr<Type> to; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    bool isExplicit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    inline Cast(std::shared_ptr<Type> from, std::shared_ptr<Type> to) : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        from{ std::move(from) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        to{ std::move(to) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        isExplicit{ true } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    inline Cast(std::shared_ptr<Type> from, std::shared_ptr<Type> to, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                bool isExplicit) : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        from{ std::move(from) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        to{ std::move(to) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        isExplicit{ isExplicit } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif // QLOW_SEM_CAST_H 
			 |