話をぶった切ってすみません、質問させてください。 template <template <int> class apply, int n> struct applier { enum { value = apply<n>::value }; }; template <int n> struct add { template <int m> struct result { enum { value = n + m }; }; }; template <int n, int m> struct applier_add { enum { value = applier<add<n>::result, m >::value }; }; int main() { std::cout << applier_add<2,3>::value << std::endl; } これが VS.net のコンパイルできて g++ 3.4.4 でコンパイルできないのは何ででしょうか? また、これを g++ でコンパイルできるようにするにはどうしたらよいでしょうか?
g++で出るコンパイルエラーは↓です main.cpp:11: error: type/value mismatch at argument 1 in template parameter list for `template<template<int <anonymous> > class apply, int n> struct applier' main.cpp:11: error: expected a class template, got ` add<n>::result'
struct C { int x; struct Y { int y1, y2; } y; int z; }; こういう構造体があるとき、C *p; に対して printf("%d\n", p->x); printf("%d\n", p->y.y1); printf("%d\n", p->y.y2); printf("%d\n", p->z); を for 文で書けないでしょうか?
いや、ごめん、実装依存か? http://gcc.gnu.org/gcc-4.0/changes.html The compiler now uses the library interface specified by the C++ ABI for thread-safe initialization of function-scope static variables. Most users should leave this alone, but embedded programmers may want to disable this by specifying -fno-threadsafe- statics for a small savings in code size.