- #include <iostream> 
- #include <type_traits> 
- using namespace std; 
-   
- struct Vector{}; 
- struct SubVector{}; 
- struct StrangeVector{}; 
-   
- template<class T> struct is_vector_type : false_type{}; 
- template<> struct is_vector_type<Vector> : true_type{}; 
- template<> struct is_vector_type<SubVector> : true_type{}; 
- template<> struct is_vector_type<StrangeVector> : true_type{}; 
-   
- template <typename T1, typename T2> 
- typename std::enable_if<is_vector_type<T1>::value && is_vector_type<T2>::value, const Vector>::type 
- operator +(const T1 &t1, const T2 &t2){ 
- 	cout << "Addiere 2 Vektoren\n"; 
- 	return Vector(); 
- } 
-   
- template <typename T1, typename T2> 
- typename std::enable_if<is_vector_type<T1>::value && is_arithmetic<T2>::value, const Vector>::type 
- operator *(const T1 &t1, const T2 &t2){ 
- 	cout << "Multipliziere einen Vektor mit einem zahlartigen Datentyp\n"; 
- 	return Vector(); 
- } 
-   
- template <typename T1, typename T2> 
- typename std::enable_if<is_arithmetic<T1>::value && is_vector_type<T2>::value, const Vector>::type 
- operator *(const T1 &t1, const T2 &t2){ 
- 	cout << "Multipliziere einen zahlartigen Datentyp mit einem Vektor auf clevere/faule Weise!\n"; 
- 	return t2 * t1; 
- } 
-   
- int main(){ 
- 	6 * Vector(); 
- } 
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgVmVjdG9ye307CnN0cnVjdCBTdWJWZWN0b3J7fTsKc3RydWN0IFN0cmFuZ2VWZWN0b3J7fTsKCnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBpc192ZWN0b3JfdHlwZSA6IGZhbHNlX3R5cGV7fTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfdmVjdG9yX3R5cGU8VmVjdG9yPiA6IHRydWVfdHlwZXt9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc192ZWN0b3JfdHlwZTxTdWJWZWN0b3I+IDogdHJ1ZV90eXBle307CnRlbXBsYXRlPD4gc3RydWN0IGlzX3ZlY3Rvcl90eXBlPFN0cmFuZ2VWZWN0b3I+IDogdHJ1ZV90eXBle307Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgp0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxpc192ZWN0b3JfdHlwZTxUMT46OnZhbHVlICYmIGlzX3ZlY3Rvcl90eXBlPFQyPjo6dmFsdWUsIGNvbnN0IFZlY3Rvcj46OnR5cGUKb3BlcmF0b3IgKyhjb25zdCBUMSAmdDEsIGNvbnN0IFQyICZ0Mil7Cgljb3V0IDw8ICJBZGRpZXJlIDIgVmVrdG9yZW5cbiI7CglyZXR1cm4gVmVjdG9yKCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CnR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGlzX3ZlY3Rvcl90eXBlPFQxPjo6dmFsdWUgJiYgaXNfYXJpdGhtZXRpYzxUMj46OnZhbHVlLCBjb25zdCBWZWN0b3I+Ojp0eXBlCm9wZXJhdG9yICooY29uc3QgVDEgJnQxLCBjb25zdCBUMiAmdDIpewoJY291dCA8PCAiTXVsdGlwbGl6aWVyZSBlaW5lbiBWZWt0b3IgbWl0IGVpbmVtIHphaGxhcnRpZ2VuIERhdGVudHlwXG4iOwoJcmV0dXJuIFZlY3RvcigpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgp0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxpc19hcml0aG1ldGljPFQxPjo6dmFsdWUgJiYgaXNfdmVjdG9yX3R5cGU8VDI+Ojp2YWx1ZSwgY29uc3QgVmVjdG9yPjo6dHlwZQpvcGVyYXRvciAqKGNvbnN0IFQxICZ0MSwgY29uc3QgVDIgJnQyKXsKCWNvdXQgPDwgIk11bHRpcGxpemllcmUgZWluZW4gemFobGFydGlnZW4gRGF0ZW50eXAgbWl0IGVpbmVtIFZla3RvciBhdWYgY2xldmVyZS9mYXVsZSBXZWlzZSFcbiI7CglyZXR1cm4gdDIgKiB0MTsKfQoKaW50IG1haW4oKXsKCTYgKiBWZWN0b3IoKTsKfQo=