gcc에는 initializer_list 라이브러리 없나요?

dltkddyd의 이미지

initializer_list 사용하려고 다음과 같이 소스를 만들고

#include <iostream>
#include <initializer_list>

template<class T> void print_list (std::initializer_list il) {
for (const T* it=begin(il); it!=end(il); ++it) std::cout << " " << *it;
std::cout << std::endl;
}

int main ()
{
print_list ({10,20,30});
return 0;
}

컴파일 했는데 안 되네요. gcc는 initializer_list 라이브러리가 없나요. 이걸 꼭 써야 하는데요.

empty2fill의 이미지

initializer_list는 GCC 4.4 이상에서 구현되었습니다.

사용하시는 GCC 버전이 어떻게 되시는지요?

그리고 gcc에서 C++0x/C++11 기능을 사용하려면은 -std=c++0x 또는 -std=gnu++0x 옵션을 주어야 합니다.

[C++0x/C++11 Support in GCC]
http://gcc.gnu.org/projects/cxx0x.html

#include <iostream>
#include <initializer_list>
 
template<class T>
void print_list (std::initializer_list<T> il)
{
    for (const T* it=il.begin(); it!=il.end(); ++it)
      std::cout << " " << *it;
 
    std::cout << std::endl;
}
 
int main ()
{
    print_list ({10,20,30});
    return 0;
}

g++ -std=c++0x main.cpp
./a.out
10 20 30

——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -

empty2fill의 이미지

참고로 gcc version 4.4.4 에서 시험 하였습니다.

std::begin(std::initializer_list) 와 std::end(std::initializer_list) 는 4.4.4에서 아직 지원을 안하는 것 같습니다.

그래서 il.begin()과 il.end()를 사용하였습니다.

——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -