bug_ms_vec_static.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. template<typename T> struct vec2;
  2. template<typename T>
  3. struct _swizzle_base0
  4. {
  5. char _buffer[1];
  6. };
  7. template<typename T, int E0, int E1, int E2, int E3>
  8. struct _swizzle_base1 : public _swizzle_base0<T>
  9. {
  10. };
  11. template<typename T, int E0, int E1>
  12. struct _swizzle_base1<T, E0,E1,-1,-2> : public _swizzle_base0<T>
  13. {
  14. };
  15. template<typename T, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>
  16. struct _swizzle_base2 : public _swizzle_base1<T, E0,E1,E2,E3>
  17. {
  18. };
  19. template<typename T, int E0, int E1, int E2, int E3>
  20. struct _swizzle_base2<T, E0,E1,E2,E3, 1> : public _swizzle_base1<T, E0,E1,E2,E3>
  21. {
  22. };
  23. template<typename T, int E0, int E1, int E2, int E3>
  24. struct _swizzle : public _swizzle_base2<T, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)>
  25. {
  26. };
  27. template<typename T>
  28. struct vec2
  29. {
  30. constexpr vec2(T x, T y) :
  31. x(x), y(y)
  32. {}
  33. union
  34. {
  35. struct { T x, y; };
  36. struct { _swizzle<T, 0,0,-1,-2> xx; };
  37. };
  38. };
  39. typedef vec2<float> float2;
  40. // Visual C++ has a bug generating the error: fatal error C1001: An internal error has occurred in the compiler.
  41. float2 const Bar(1.f, 1.f);
  42. int main()
  43. {
  44. return 0;
  45. }