2013-05-06 6 views
0

"내부"로컬 변수가 "외부"로컬 변수를 숨기면 Boost Phoenix에서 중첩 된 let 블록에 문제가 있습니다. 심지어 문서 here에서 "가시성"예와, 여기에 표시 :Boost Phoenix에서 중첩 된 let 블록 내의 변수 숨기기

GCC: "error: function returning an array" 
Clang: "error: function cannot return array type 'result_type' (aka 'char [6]')" 

사람이 범위 내에서 어떻게 내가 할 수있는 "그림자"등의 변수를 알고 있나요 :

#include <iostream> 
#include <boost/phoenix.hpp> 

namespace phoenix = boost::phoenix; 
using namespace phoenix::local_names; 

int main(int argc, char *argv[]) 
{ 
    phoenix::let(_x = 1, _y = ", World") 
    [ 
    phoenix::let(_x = "Hello") // hides the outer _x 
    [ 
     std::cout << _x << _y // prints "Hello, World" 
    ] 
    ](); 

    return 0; 
} 

I로 시작하는 오류가 발생 피닉스에있는 내부의 블록을 보자고? 현재 GCC 버전 4.8 스냅 샷으로 Ubuntu 13.04를 사용하고 있습니다. Clang 3.2; 부스트 1.49; 부스트 1.53.

답변

2

피닉스에서 가장 확실한 버그입니다. 다음 컴파일 :

int y = 0; 
int x = (phoenix::let(_a = 1, _b = 2)[phoenix::let(_b = _1)[ _a ]])(y); 

다음은하지 않습니다 :

int y = 0; 
int x = (phoenix::let(_a = 1, _b = 2)[phoenix::let(_b = 3)[ _a ]])(y); 

엽기. https://svn.boost.org/trac/boost/ ("새 티켓"클릭)에서 버그를 제기 할 수 있습니까? 감사. (참고 : 저는 관리자가 아닙니다.)

+0

확실한 것. 의견을 보내 주셔서 감사합니다. – user2023370

+0

버그가 지금 제출되었습니다 [여기] (https://svn.boost.org/trac/boost/ticket/8564) – user2023370